/*
 * Copyright (c) 1998, 2022 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0,
 * or the Eclipse Distribution License v. 1.0 which is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
 */

// Contributors:
//     Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.testing.framework.ui;

import org.eclipse.persistence.config.PersistenceUnitProperties;
import org.eclipse.persistence.internal.helper.Helper;
import org.eclipse.persistence.sessions.DatabaseLogin;
import org.eclipse.persistence.sessions.DatabaseSession;
import org.eclipse.persistence.sessions.DefaultConnector;
import org.eclipse.persistence.sessions.Project;
import org.eclipse.persistence.testing.framework.LoadBuildSystem;
import org.eclipse.persistence.testing.framework.TestCase;
import org.eclipse.persistence.testing.framework.TestCollection;
import org.eclipse.persistence.testing.framework.TestEntity;
import org.eclipse.persistence.testing.framework.TestErrorException;
import org.eclipse.persistence.testing.framework.TestExecutor;
import org.eclipse.persistence.testing.framework.TestModel;
import org.eclipse.persistence.testing.framework.TestResultsSummary;
import org.eclipse.persistence.testing.framework.TestSystem;
import org.eclipse.persistence.tools.schemaframework.SchemaManager;
import org.eclipse.persistence.tools.sessionconsole.SessionConsolePanel;

import javax.swing.*;
import javax.swing.tree.TreePath;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.Method;
import java.util.Map;
import java.util.Vector;

/**
 * Main panel for the testing browser.
 * This was original done in the VA UI builder, so code is ugly, but is maintain by hand now.
 */
public class TestingBrowserPanel extends JPanel implements ItemListener, junit.framework.TestListener, SynchronizedTester {
    protected SynchronizedTestExecutor executionThread;
    protected TestExecutor executor;
    protected Vector<TestModel> models;
    protected junit.framework.Test currentRun;
    private JButton theKillButton = null;
    private JButton theResetButton = null;
    private JButton theRunTestButton = null;
    private SessionConsolePanel theSessionInspectorPanel = null;
    private JButton theSetupButton = null;
    private JButton theStopButton = null;
    private JScrollPane theTestsScrollPane = null;
    private JTree theTestsTree = null;
    private JSplitPane theSplitPane = null;
    private JPanel theTestPanel = null;
    private JToolBar theToolBar = null;
    private JCheckBox theHandleErrorsCheckBox = null;
    private JCheckBox runFastCheckBox = null;
    private JCheckBox logErrorsOnlyCheckBox = null;
    private JComboBox<String> theLoginChoice = null;
    private JLabel theQuickLoginLabel = null;
    private JButton theloadBuildButton = null;
    private JLabel theCurrentTestLabel = null;
    private JTextField theCurrentTestTextField = null;
    private JProgressBar theRunModelProgressBar = null;
    private JProgressBar theRunProgressBar = null;
    private JProgressBar errorsProgressBar = null;
    private JLabel theStatusLabel = null;
    private JLabel theCurrentSuiteLabel = null;
    private JTextField theCurrentSuiteTextField = null;
    private JLabel theRunStatusLabel = null;
    private JLabel errorsLabel = null;
    TestBrowserEventHandler theEventHandler = new TestBrowserEventHandler();

    public TestingBrowserPanel() {
        super();
        initialize();
    }

    public TestingBrowserPanel(LayoutManager layout) {
        super(layout);
    }

    public TestingBrowserPanel(LayoutManager layout, boolean isDoubleBuffered) {
        super(layout, isDoubleBuffered);
    }

    public TestingBrowserPanel(boolean isDoubleBuffered) {
        super(isDoubleBuffered);
    }

    /**
     * Stop the selected test.
     */
    @Override
    public void finishedTest() {
        getStopButton().setEnabled(false);
        getKillButton().setEnabled(false);

        if ((getExecutionThread() != null) && getExecutionThread().shouldRunSetupOnly()) {
            TreePath path = getTestsTree().getSelectionPath();
            resetModels();
            getTestsTree().setExpandsSelectedPaths(true);
            getTestsTree().setSelectionPath(new TreePath(path.getPath()));
            getTestsTree().expandPath(path);
            getTestsTree().makeVisible(path);
            getTestsTree().invalidate();
            getTestsTree().validate();
            getTestsTree().repaint();
        }
        // Reset the session inspectors session as test model reset builds clean session.
        getSessionInspectorPanel().setSession(getExecutor().getSession());

        if (getExecutor().getSession() != null) {
            while (getExecutor().getAbstractSession().isInTransaction()) {
                getExecutor().getAbstractSession().rollbackTransaction();
            }
        }
        getSessionInspectorPanel().resetDescriptors();
        setCurrentRun(null);
        getRunProgressBar().setValue(0);
        getRunModelProgressBar().setValue(0);
        getCurrentTestTextField().setText("");
        getCurrentSuiteTextField().setText("");

        showNormalCursor();
    }

    /**
     * The run is the currently executing test model.
     */
    public junit.framework.Test getCurrentRun() {
        return currentRun;
    }

    /**
     * Return the CurrentSuiteLabel property value.
     * @return JLabel
     */
    private JLabel getCurrentSuiteLabel() {
        if (theCurrentSuiteLabel == null) {
            try {
                theCurrentSuiteLabel = new JLabel();
                theCurrentSuiteLabel.setName("CurrentSuiteLabel");
                theCurrentSuiteLabel.setText("Current Suite:");
                theCurrentSuiteLabel.setBackground(SystemColor.control);
            } catch (Throwable exception) {
                handleException(exception);
            }
        }
        return theCurrentSuiteLabel;
    }

    /**
     * Return the CurrentSuiteTextField property value.
     * @return JTextField
     */
    private JTextField getCurrentSuiteTextField() {
        if (theCurrentSuiteTextField == null) {
            try {
                theCurrentSuiteTextField = new JTextField();
                theCurrentSuiteTextField.setName("CurrentSuiteTextField");
                theCurrentSuiteTextField.setBackground(SystemColor.control);
                theCurrentSuiteTextField.setEditable(false);
            } catch (Throwable exception) {
                handleException(exception);
            }
        }
        return theCurrentSuiteTextField;
    }

    /**
     * Return the CurrentTestLabel property value.
     * @return JLabel
     */
    private JLabel getCurrentTestLabel() {
        if (theCurrentTestLabel == null) {
            try {
                theCurrentTestLabel = new JLabel();
                theCurrentTestLabel.setName("CurrentTestLabel");
                theCurrentTestLabel.setText("Current Test:");
                theCurrentTestLabel.setBackground(SystemColor.control);
            } catch (Throwable exception) {
                handleException(exception);
            }
        }
        return theCurrentTestLabel;
    }

    /**
     * Return the CurrentTestTextField property value.
     * @return JTextField
     */
    private JTextField getCurrentTestTextField() {
        if (theCurrentTestTextField == null) {
            try {
                theCurrentTestTextField = new JTextField();
                theCurrentTestTextField.setName("CurrentTestTextField");
                theCurrentTestTextField.setBackground(SystemColor.control);
                theCurrentTestTextField.setEditable(false);
            } catch (Throwable exception) {
                handleException(exception);
            }
        }
        return theCurrentTestTextField;
    }

    /**
     * Return the execution thread.
     */
    protected SynchronizedTestExecutor getExecutionThread() {
        return executionThread;
    }

    /**
     * Return the test executor.
     */
    public TestExecutor getExecutor() {
        return executor;
    }

    /**
     * Return the JCheckBox1 property value.
     * @return JCheckBox
     */
    private JCheckBox getHandleErrorsCheckBox() {
        if (theHandleErrorsCheckBox == null) {
            try {
                theHandleErrorsCheckBox = new JCheckBox();
                theHandleErrorsCheckBox.setName("HandleErrorsCheckBox");
                theHandleErrorsCheckBox.setText("Handle Errors");
                theHandleErrorsCheckBox.setBackground(SystemColor.control);
            } catch (Throwable exception) {
                handleException(exception);
            }
        }
        return theHandleErrorsCheckBox;
    }

    private JCheckBox getRunFastCheckBox() {
        if (runFastCheckBox == null) {
            try {
                runFastCheckBox = new JCheckBox();
                runFastCheckBox.setName("RunFastCheckBox");
                runFastCheckBox.setText("Fast");
                runFastCheckBox.setBackground(SystemColor.control);
            } catch (Throwable exception) {
                handleException(exception);
            }
        }
        return runFastCheckBox;
    }

    private JCheckBox getLogOnlyErrorsCheckBox() {
        if (logErrorsOnlyCheckBox == null) {
            try {
                logErrorsOnlyCheckBox = new JCheckBox();
                logErrorsOnlyCheckBox.setName("LogErrorsOnlyCheckBox");
                logErrorsOnlyCheckBox.setText("Log Errors Only");
                logErrorsOnlyCheckBox.setBackground(SystemColor.control);
            } catch (Throwable exception) {
                handleException(exception);
            }
        }
        return logErrorsOnlyCheckBox;
    }

    /**
     * Return the KillButton property value.
     * @return JButton
     */
    private JButton getKillButton() {
        if (theKillButton == null) {
            try {
                theKillButton = new JButton();
                theKillButton.setName("KillButton");
                theKillButton.setText("Kill");
                theKillButton.setBackground(SystemColor.control);
            } catch (Throwable exception) {
                handleException(exception);
            }
        }
        return theKillButton;
    }

    /**
     * Return the loadBuildButton property value.
     * @return JButton
     */
    private JButton getLoadBuildButton() {
        if (theloadBuildButton == null) {
            try {
                theloadBuildButton = new JButton();
                theloadBuildButton.setName("loadBuildButton");
                theloadBuildButton.setText("Query Test Results");
                theloadBuildButton.setBackground(SystemColor.control);
            } catch (Throwable exception) {
                handleException(exception);
            }
        }
        return theloadBuildButton;
    }

    /**
     * Return the LoginComboBox property value.
     * @return JComboBox
     */
    private

    /* WARNING: THIS METHOD WILL BE REGENERATED. */
    JComboBox<String> getLoginChoice() {
        if (theLoginChoice == null) {
            try {
                theLoginChoice = new JComboBox<>();
                theLoginChoice.setName("LoginChoice");
                theLoginChoice.setBackground(SystemColor.window);

                // user code begin {1}
                // user code end
            } catch (Throwable exception) {
                // user code begin {2}
                // user code end
                handleException(exception);
            }
        }
        return theLoginChoice;
    }

    /**
     * Return the loaded models.
     */
    public Vector<TestModel> getModels() {
        return models;
    }

    /**
     * Return the QuickLoginButton property value.
     * @return JLabel
     */
    private JLabel getQuickLoginLabel() {
        if (theQuickLoginLabel == null) {
            try {
                theQuickLoginLabel = new JLabel();
                theQuickLoginLabel.setName("QuickLoginLabel");
                theQuickLoginLabel.setText("Quick Login:");
                theQuickLoginLabel.setBackground(SystemColor.control);
            } catch (Throwable exception) {
                handleException(exception);
            }
        }
        return theQuickLoginLabel;
    }

    /**
     * Return the ResetButton property value.
     * @return JButton
     */
    private JButton getResetButton() {
        if (theResetButton == null) {
            try {
                theResetButton = new JButton();
                theResetButton.setName("ResetButton");
                theResetButton.setText("Reset");
                theResetButton.setBackground(SystemColor.control);
            } catch (Throwable exception) {
                handleException(exception);
            }
        }
        return theResetButton;
    }

    /**
     * Return the frame.
     */
    public Container getRoot() {
        Container parent = this;
        while (!(parent instanceof Frame)) {
            parent = parent.getParent();
            if (parent == null) {
                return this;
            }
        }
        return parent;
    }

    /**
     * Return the RunModelProgressBar property value.
     * @return JProgressBar
     */
    private JProgressBar getRunModelProgressBar() {
        if (theRunModelProgressBar == null) {
            try {
                theRunModelProgressBar = new JProgressBar();
                theRunModelProgressBar.setName("RunModelProgressBar");
                theRunModelProgressBar.setBackground(SystemColor.control);
            } catch (Throwable exception) {
                handleException(exception);
            }
        }
        return theRunModelProgressBar;
    }

    /**
     * Return the ProgressBar property value.
     * @return JProgressBar
     */
    private JProgressBar getRunProgressBar() {
        if (theRunProgressBar == null) {
            try {
                theRunProgressBar = new JProgressBar();
                theRunProgressBar.setName("RunProgressBar");
                theRunProgressBar.setBackground(SystemColor.control);
            } catch (Throwable exception) {
                handleException(exception);
            }
        }
        return theRunProgressBar;
    }

    private JProgressBar getErrorsProgressBar() {
        if (errorsProgressBar == null) {
            try {
                errorsProgressBar = new JProgressBar();
                errorsProgressBar.setName("ErrorsProgressBar");
                errorsProgressBar.setForeground(Color.RED);
                errorsProgressBar.setBackground(SystemColor.control);
            } catch (Throwable exception) {
                handleException(exception);
            }
        }
        return errorsProgressBar;
    }

    /**
     * Return the RunStatusLabel property value.
     * @return JLabel
     */
    private JLabel getRunStatusLabel() {
        if (theRunStatusLabel == null) {
            try {
                theRunStatusLabel = new JLabel();
                theRunStatusLabel.setName("RunStatusLabel");
                theRunStatusLabel.setText("Run Status:");
                theRunStatusLabel.setBackground(SystemColor.control);
            } catch (Throwable exception) {
                handleException(exception);
            }
        }
        return theRunStatusLabel;
    }

    /**
     * Return the ErrorsLabel property value.
     * @return JLabel
     */
    private JLabel getErrorsLabel() {
        if (errorsLabel == null) {
            try {
                errorsLabel = new JLabel();
                errorsLabel.setName("RrrorsLabel");
                errorsLabel.setText("Errors:");
                errorsLabel.setBackground(SystemColor.control);
            } catch (Throwable exception) {
                handleException(exception);
            }
        }
        return errorsLabel;
    }

    /**
     * Return the RunTestButton property value.
     * @return JButton
     */
    private JButton getRunTestButton() {
        if (theRunTestButton == null) {
            try {
                theRunTestButton = new JButton();
                theRunTestButton.setName("RunTestButton");
                theRunTestButton.setText("Run Test");
                theRunTestButton.setBackground(SystemColor.control);
            } catch (Throwable exception) {
                handleException(exception);
            }
        }
        return theRunTestButton;
    }

    /**
     * Return what ever is selected.
     */
    public junit.framework.Test getSelectedTest() {
        return (junit.framework.Test)getTestsTree().getSelectionPath().getLastPathComponent();
    }

    /**
     * Return what ever is selected, return null if not a TestEntity.
     */
    public TestEntity getSelectedEntity() {
        junit.framework.Test test = getSelectedTest();
        if (!(test instanceof TestEntity)) {
            return null;
        }
        return (TestEntity)test;
    }

    /**
     * Return the SessionInspectorPanel property value.
     * @return org.eclipse.persistence.tools.sessionconsole.SessionConsolePanel
     */
    private

    /* WARNING: THIS METHOD WILL BE REGENERATED. */
    org.eclipse.persistence.tools.sessionconsole.SessionConsolePanel getSessionInspectorPanel() {
        if (theSessionInspectorPanel == null) {
            try {
                theSessionInspectorPanel = new org.eclipse.persistence.tools.sessionconsole.SessionConsolePanel();
                theSessionInspectorPanel.setName("SessionInspectorPanel");
            } catch (Throwable exception) {
                handleException(exception);
            }
        }
        return theSessionInspectorPanel;
    }

    /**
     * Return the SetupButton property value.
     * @return JButton
     */
    private

    /* WARNING: THIS METHOD WILL BE REGENERATED. */
    JButton getSetupButton() {
        if (theSetupButton == null) {
            try {
                theSetupButton = new JButton();
                theSetupButton.setName("SetupButton");
                theSetupButton.setText("Setup");
                theSetupButton.setBackground(SystemColor.control);

                // user code begin {1}
                // user code end
            } catch (Throwable exception) {
                // user code begin {2}
                // user code end
                handleException(exception);
            }
        }
        return theSetupButton;
    }

    /**
     * Return the SplitPane property value.
     * @return JSplitPane
     */
    private JSplitPane getSplitPane() {
        if (theSplitPane == null) {
            try {
                theSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
                theSplitPane.setName("SplitPane");
                theSplitPane.setDividerSize(8);
                theSplitPane.setOneTouchExpandable(true);
                theSplitPane.setDividerLocation(200);
                getSplitPane().add(getSessionInspectorPanel(), "right");
                getSplitPane().add(getTestPanel(), "left");
            } catch (Throwable exception) {
                handleException(exception);
            }
        }
        return theSplitPane;
    }

    /**
     * Return the StatusLabel property value.
     * @return JLabel
     */
    private

    /* WARNING: THIS METHOD WILL BE REGENERATED. */
    JLabel getStatusLabel() {
        if (theStatusLabel == null) {
            try {
                theStatusLabel = new JLabel();
                theStatusLabel.setName("StatusLabel");
                theStatusLabel.setText("Suite Status:");
                theStatusLabel.setBackground(SystemColor.control);

                // user code begin {1}
                // user code end
            } catch (Throwable exception) {
                // user code begin {2}
                // user code end
                handleException(exception);
            }
        }
        return theStatusLabel;
    }

    /**
     * Return the StopButton property value.
     * @return JButton
     */
    private JButton getStopButton() {
        if (theStopButton == null) {
            try {
                theStopButton = new JButton();
                theStopButton.setName("StopButton");
                theStopButton.setText("Stop");
                theStopButton.setBackground(SystemColor.control);
            } catch (Throwable exception) {
                handleException(exception);
            }
        }
        return theStopButton;
    }

    /**
     * Return the TestPanel property value.
     * @return JPanel
     */
    private JPanel getTestPanel() {
        if (theTestPanel == null) {
            try {
                theTestPanel = new JPanel();
                theTestPanel.setName("TestPanel");
                theTestPanel.setLayout(new GridBagLayout());
                theTestPanel.setBackground(SystemColor.control);
                theTestPanel.setPreferredSize(new Dimension(300, 0));

                GridBagConstraints constraintsHandleErrorsCheckBox = new GridBagConstraints();
                constraintsHandleErrorsCheckBox.gridx = 0;
                constraintsHandleErrorsCheckBox.gridy = 7;
                constraintsHandleErrorsCheckBox.anchor = GridBagConstraints.WEST;
                constraintsHandleErrorsCheckBox.insets = new Insets(0, 2, 0, 0);
                getTestPanel().add(getHandleErrorsCheckBox(), constraintsHandleErrorsCheckBox);

                GridBagConstraints constraintsRunFastCheckBox = new GridBagConstraints();
                constraintsRunFastCheckBox.gridx = 0;
                constraintsRunFastCheckBox.gridy = 8;
                constraintsRunFastCheckBox.anchor = GridBagConstraints.WEST;
                constraintsRunFastCheckBox.insets = new Insets(0, 2, 0, 0);
                getTestPanel().add(getRunFastCheckBox(), constraintsRunFastCheckBox);

                GridBagConstraints constraintsLogOnlyErrorsCheckBox = new GridBagConstraints();
                constraintsLogOnlyErrorsCheckBox.gridx = 0;
                constraintsLogOnlyErrorsCheckBox.gridy = 9;
                constraintsLogOnlyErrorsCheckBox.anchor = GridBagConstraints.WEST;
                constraintsLogOnlyErrorsCheckBox.insets = new Insets(0, 2, 0, 0);
                getTestPanel().add(getLogOnlyErrorsCheckBox(), constraintsLogOnlyErrorsCheckBox);

                GridBagConstraints constraintsTestsScrollPane = new GridBagConstraints();
                constraintsTestsScrollPane.gridx = 0;
                constraintsTestsScrollPane.gridy = 0;
                constraintsTestsScrollPane.gridwidth = 2;
                constraintsTestsScrollPane.fill = GridBagConstraints.BOTH;
                constraintsTestsScrollPane.weightx = 1.0;
                constraintsTestsScrollPane.weighty = 1.0;
                getTestPanel().add(getTestsScrollPane(), constraintsTestsScrollPane);

                GridBagConstraints constraintsRunProgressBar = new GridBagConstraints();
                constraintsRunProgressBar.gridx = 1;
                constraintsRunProgressBar.gridy = 1;
                constraintsRunProgressBar.gridwidth = 2;
                constraintsRunProgressBar.fill = GridBagConstraints.HORIZONTAL;
                constraintsRunProgressBar.insets = new Insets(2, 2, 2, 2);
                getTestPanel().add(getRunProgressBar(), constraintsRunProgressBar);

                GridBagConstraints constraintsQuickLoginLabel = new GridBagConstraints();
                constraintsQuickLoginLabel.gridx = 0;
                constraintsQuickLoginLabel.gridy = 6;
                constraintsQuickLoginLabel.anchor = GridBagConstraints.WEST;
                constraintsQuickLoginLabel.insets = new Insets(0, 7, 0, 2);
                getTestPanel().add(getQuickLoginLabel(), constraintsQuickLoginLabel);

                GridBagConstraints constraintsLoginChoice = new GridBagConstraints();
                constraintsLoginChoice.gridx = 1;
                constraintsLoginChoice.gridy = 6;
                constraintsLoginChoice.fill = GridBagConstraints.HORIZONTAL;
                constraintsLoginChoice.insets = new Insets(2, 2, 2, 2);
                getTestPanel().add(getLoginChoice(), constraintsLoginChoice);

                GridBagConstraints constraintsRunModelProgressBar = new GridBagConstraints();
                constraintsRunModelProgressBar.gridx = 1;
                constraintsRunModelProgressBar.gridy = 4;
                constraintsRunModelProgressBar.gridwidth = 2;
                constraintsRunModelProgressBar.fill = GridBagConstraints.HORIZONTAL;
                constraintsRunModelProgressBar.insets = new Insets(0, 2, 0, 2);
                getTestPanel().add(getRunModelProgressBar(), constraintsRunModelProgressBar);

                GridBagConstraints constraintsErrorsLabel = new GridBagConstraints();
                constraintsErrorsLabel.gridx = 0;
                constraintsErrorsLabel.gridy = 2;
                constraintsErrorsLabel.anchor = GridBagConstraints.WEST;
                constraintsErrorsLabel.insets = new Insets(0, 7, 0, 2);
                getTestPanel().add(getErrorsLabel(), constraintsErrorsLabel);

                GridBagConstraints constraintsErrorsProgressBar = new GridBagConstraints();
                constraintsErrorsProgressBar.gridx = 1;
                constraintsErrorsProgressBar.gridy = 2;
                constraintsErrorsProgressBar.gridwidth = 2;
                constraintsErrorsProgressBar.fill = GridBagConstraints.HORIZONTAL;
                constraintsErrorsProgressBar.insets = new Insets(0, 3, 0, 2);
                getTestPanel().add(getErrorsProgressBar(), constraintsErrorsProgressBar);

                GridBagConstraints constraintsStatusLabel = new GridBagConstraints();
                constraintsStatusLabel.gridx = 0;
                constraintsStatusLabel.gridy = 4;
                constraintsStatusLabel.anchor = GridBagConstraints.WEST;
                constraintsStatusLabel.insets = new Insets(0, 7, 0, 2);
                getTestPanel().add(getStatusLabel(), constraintsStatusLabel);

                GridBagConstraints constraintsCurrentTestLabel = new GridBagConstraints();
                constraintsCurrentTestLabel.gridx = 0;
                constraintsCurrentTestLabel.gridy = 5;
                constraintsCurrentTestLabel.anchor = GridBagConstraints.WEST;
                constraintsCurrentTestLabel.insets = new Insets(0, 7, 0, 2);
                getTestPanel().add(getCurrentTestLabel(), constraintsCurrentTestLabel);

                GridBagConstraints constraintsCurrentTestTextField = new GridBagConstraints();
                constraintsCurrentTestTextField.gridx = 1;
                constraintsCurrentTestTextField.gridy = 5;
                constraintsCurrentTestTextField.fill = GridBagConstraints.HORIZONTAL;
                constraintsCurrentTestTextField.insets = new Insets(2, 2, 2, 2);
                getTestPanel().add(getCurrentTestTextField(), constraintsCurrentTestTextField);

                GridBagConstraints constraintsRunStatusLabel = new GridBagConstraints();
                constraintsRunStatusLabel.gridx = 0;
                constraintsRunStatusLabel.gridy = 1;
                constraintsRunStatusLabel.anchor = GridBagConstraints.WEST;
                constraintsRunStatusLabel.insets = new Insets(0, 7, 0, 2);
                getTestPanel().add(getRunStatusLabel(), constraintsRunStatusLabel);

                GridBagConstraints constraintsCurrentSuiteLabel = new GridBagConstraints();
                constraintsCurrentSuiteLabel.gridx = 0;
                constraintsCurrentSuiteLabel.gridy = 3;
                constraintsCurrentSuiteLabel.anchor = GridBagConstraints.WEST;
                constraintsCurrentSuiteLabel.insets = new Insets(0, 7, 0, 2);
                getTestPanel().add(getCurrentSuiteLabel(), constraintsCurrentSuiteLabel);

                GridBagConstraints constraintsCurrentSuiteTextField = new GridBagConstraints();
                constraintsCurrentSuiteTextField.gridx = 1;
                constraintsCurrentSuiteTextField.gridy = 3;
                constraintsCurrentSuiteTextField.fill = GridBagConstraints.HORIZONTAL;
                constraintsCurrentSuiteTextField.insets = new Insets(2, 2, 2, 2);
                getTestPanel().add(getCurrentSuiteTextField(), constraintsCurrentSuiteTextField);
            } catch (Throwable exception) {
                handleException(exception);
            }
        }
        return theTestPanel;
    }

    /**
     * Return the TestsScrollPane property value.
     * @return JScrollPane
     */
    private

    /* WARNING: THIS METHOD WILL BE REGENERATED. */
    JScrollPane getTestsScrollPane() {
        if (theTestsScrollPane == null) {
            try {
                theTestsScrollPane = new JScrollPane();
                theTestsScrollPane.setName("TestsScrollPane");
                theTestsScrollPane.setMinimumSize(new Dimension(0, 0));
                theTestsScrollPane.setMaximumSize(new Dimension(0, 0));
                getTestsScrollPane().setViewportView(getTestsTree());

                // user code begin {1}
                // user code end
            } catch (Throwable exception) {
                // user code begin {2}
                // user code end
                handleException(exception);
            }
        }
        return theTestsScrollPane;
    }

    /**
     * Return the JTree1 property value.
     * @return JTree
     */
    private

    /* WARNING: THIS METHOD WILL BE REGENERATED. */
    JTree getTestsTree() {
        if (theTestsTree == null) {
            try {
                theTestsTree = new JTree();
                theTestsTree.setName("TestsTree");
                theTestsTree.setBounds(0, 0, 76, 36);
                theTestsTree.setMaximumSize(new Dimension(0, 0));
                theTestsTree.setRootVisible(false);

                // user code begin {1}
                // user code end
            } catch (Throwable exception) {
                // user code begin {2}
                // user code end
                handleException(exception);
            }
        }
        return theTestsTree;
    }

    /**
     * Return the JToolBar1 property value.
     * @return JToolBar
     */
    private

    /* WARNING: THIS METHOD WILL BE REGENERATED. */
    JToolBar getToolBar() {
        if (theToolBar == null) {
            try {
                theToolBar = new JToolBar();
                theToolBar.setName("ToolBar");
                theToolBar.setBackground(SystemColor.control);
                theToolBar.add(getRunTestButton());
                theToolBar.addSeparator();
                theToolBar.add(getSetupButton());
                theToolBar.addSeparator();
                theToolBar.add(getResetButton());
                theToolBar.addSeparator();
                theToolBar.add(getStopButton());
                theToolBar.addSeparator();
                theToolBar.add(getKillButton());
                theToolBar.addSeparator();
                getToolBar().add(getLoadBuildButton(), getLoadBuildButton().getName());

                // user code begin {1}
                // user code end
            } catch (Throwable exception) {
                // user code begin {2}
                // user code end
                handleException(exception);
            }
        }
        return theToolBar;
    }

    /**
     * Toggle the error handling logging.
     */
    public void handleErrorsChanged() {
        getExecutor().setShouldHandleErrors(getHandleErrorsCheckBox().isSelected());
    }

    /**
     * Toggle the run fast/recreate system option.
     */
    public void runFastChanged() {
        SchemaManager.FAST_TABLE_CREATOR = getRunFastCheckBox().isSelected();
        //TestModel.setShouldResetSystemAfterEachTestModel(!getRunFastCheckBox().isSelected());
    }

    /**
     * Toggle the run fast/recreate system option.
     */
    public void logOnlyErrorsChanged() {
        getExecutor().setShouldLogOnlyErrors(getLogOnlyErrorsCheckBox().isSelected());
    }

    /**
     * Called whenever the part throws an exception.
     * @param exception Throwable
     */
    private void handleException(Throwable exception) {
        try {
            getExecutor().getLog().write("--------- UNCAUGHT EXCEPTION ---------" +
                                         org.eclipse.persistence.internal.helper.Helper.cr());
            exception.printStackTrace(new PrintWriter(getExecutor().getLog()));
            getExecutor().getLog().flush();
        } catch (IOException e) {
        }
    }

    /**
     * Initializes connections
     */
    private void initConnections() {
        getRunTestButton().addActionListener(theEventHandler);
        getSetupButton().addActionListener(theEventHandler);
        getStopButton().addActionListener(theEventHandler);
        getKillButton().addActionListener(theEventHandler);
        getHandleErrorsCheckBox().addItemListener(theEventHandler);
        getRunFastCheckBox().addItemListener(theEventHandler);
        getLogOnlyErrorsCheckBox().addItemListener(theEventHandler);
        getLoginChoice().addItemListener(theEventHandler);
        getResetButton().addActionListener(theEventHandler);
        getLoadBuildButton().addActionListener(theEventHandler);
    }

    /**
     * Initialize the class.
     */
    private void initialize() {
        try {
            setName("TestingBrowserPanel");
            setLayout(new GridBagLayout());
            setBackground(SystemColor.control);
            setSize(708, 524);

            GridBagConstraints constraintsToolBar = new GridBagConstraints();
            constraintsToolBar.gridx = 0;
            constraintsToolBar.gridy = 0;
            constraintsToolBar.gridwidth = 3;
            constraintsToolBar.fill = GridBagConstraints.BOTH;
            constraintsToolBar.weightx = 1.0;
            add(getToolBar(), constraintsToolBar);

            GridBagConstraints constraintsSplitPane = new GridBagConstraints();
            constraintsSplitPane.gridx = 0;
            constraintsSplitPane.gridy = 1;
            constraintsSplitPane.fill = GridBagConstraints.BOTH;
            constraintsSplitPane.weightx = 1.0;
            constraintsSplitPane.weighty = 1.0;
            add(getSplitPane(), constraintsSplitPane);
            initConnections();
        } catch (Throwable exception) {
            handleException(exception);
        }
        setup();
    }

    /**
     * Method to handle events for the ItemListener interface.
     * @param e event.ItemEvent
     */
    @Override
    public void itemStateChanged(ItemEvent e) {
        try {
            if ((e.getSource() == getHandleErrorsCheckBox())) {
                handleErrorsChanged();
            }
            if ((e.getSource() == getRunFastCheckBox())) {
                runFastChanged();
            }
            if ((e.getSource() == getLogOnlyErrorsCheckBox())) {
                logOnlyErrorsChanged();
            }
            if ((e.getSource() == getLoginChoice())) {
                loginChanged();
            }
        } catch (Throwable exception) {
            handleException(exception);
        }
    }

    /**
     * Kill the test thread.
     */
    @SuppressWarnings("deprecation")
    public void killTest() {
        if (getExecutionThread() != null) {
            getExecutionThread().stop();
            setExecutionThread(null);
        }

        finishedTest();
        // Need to use old API to be able to run with 9.0.4 jar for perf testing.
        getExecutor().getSession().getIdentityMapAccessor().initializeAllIdentityMaps();
    }

    /**
     * Reset the login info for the platform.
     */
    public void loginChanged() {
        TestSystem system = new TestSystem();

        // Config the login to the selected platform.
        String platform = (String)getLoginChoice().getSelectedItem();
        if (platform.equals("Last Login Used")) {
            try {
                getSessionInspectorPanel().loadLoginFromFile();
                system.setLogin(getSessionInspectorPanel().getLoginEditor().getLogin());
            } catch (Throwable error) {
            }
        } else if (platform.equals("Local Oracle DB (thin)")) {
            system.useOracleThin("localhost:1521:orcl", "scott", "tiger");
        } else if (platform.equals("Oracle 11gR2 (thin)")) {
            system.useOracleThin("ottvm030.ca.oracle.com:1521:TOPLINK", "", "password");
        } else if (platform.equals("Oracle 11gR1 (thin)")) {
            system.useOracleThin("ottvm028.ca.oracle.com:1521:TOPLINK", "", "password");
        } else if (platform.equals("Oracle 11gR1 - Austin (thin)")) {
            system.useOracleThin("adc6160375.us.oracle.com:1521:TOPLINK", "", "password");
        } else if (platform.equals("Oracle (OCI)")) {
            system.useOracleOCI();
        } else if (platform.equals("TimesTen - coredev1")) {
            system.useTimesTen("coredev1");
        } else if (platform.equals("TimesTen - coredev2")) {
            system.useTimesTen("coredev2");
        } else if (platform.equals("DB2 (App)")) {
            system.useDB2App();
        } else if (platform.equals("DB2 (Net)")) {
            system.useDB2Net();
        } else if (platform.equals("DB2 (Universal Driver)")) {
            system.useDB2UniversalDriver();
        } else if (platform.equals("DB2 (DataDirect)")) {
            system.useDB2DataDirect();
        } else if (platform.equals("Derby")) {
            system.useDerby();
        } else if (platform.equals("H2")) {
            system.useH2();
        } else if (platform.equals("HSQL")) {
            system.useHSQL();
        } else if (platform.equals("PostgreSQL")) {
            system.usePostgres();
        } else if (platform.equals("Informix IDS 11.1")) {
            system.useInformix11();
        } else if (platform.equals("Sybase (JConnect)")) {
            system.useSybaseJConnect();
        } else if (platform.equals("Sybase (DataDirect)")) {
            system.useSybaseDataDirect();
        } else if (platform.equals("MySQL (Connector/J) - COREDEV1")) {
            system.useMySQL("qa3");
        } else if (platform.equals("MySQL (Connector/J) - COREDEV2")) {
            system.useMySQL("qa4");
        } else if (platform.equals("SQLServer (Weblogic Thin)")) {
            system.useSQLServerWeblogicThin();
        } else if (platform.equals("SQLServer (MS JDBC)")) {
            system.useSQLServerMSJDBC();
        } else if (platform.equals("SQLServer (DataDirect)")) {
            system.useSQLServerDataDirect();
        } else if (platform.equals("MS Access (JDBCODBC)")) {
            system.useAccessJDBCODBC();
        } else if (platform.equals("Symfoware (RDB2_TCP)")) {
            system.useSymfowareRDB2_TCP();
        }

        DatabaseLogin login = system.getLogin();
        getExecutor().getAbstractSession().setLogin(login);
        getSessionInspectorPanel().getLoginEditor().setLogin(login);

        if ((LoadBuildSystem.loadBuild == null)) {
            return;
        }
        if(getExecutor().getSession().getLogin().getConnector() instanceof DefaultConnector) {
            LoadBuildSystem.loadBuild.loginChoice = login.getConnectionString();
        }
        LoadBuildSystem.loadBuild.databaseLogin =
                getSessionInspectorPanel().getSession().getProject().getLogin();
    }

    /**
     * Log result for the current test running.
     */
    public void logTestResults() {
        if (getExecutionThread() != null) {
            showBusyCursor();
            try {
                getExecutor().logResultForTestEntity(getExecutionThread().getTest());
            } finally {
                showNormalCursor();
            }
        }
    }

    /**
     * Called whenever the part throws an exception.
     * @param exception Throwable
     */
    @Override
    public void notifyException(Throwable exception) {
        try {
            getExecutor().getLog().write("--------- UNCAUGHT EXCEPTION ---------" +
                                         org.eclipse.persistence.internal.helper.Helper.cr());
            exception.printStackTrace(new PrintWriter(getExecutor().getLog()));
            getExecutor().getLog().flush();
        } catch (IOException e) {
        }
    }

    /**
     * Launch the Test Result Database query tool.
     */
    public void queryLoadBuild() {
        LoadBuildBrowserFrame loadBuildBrowser = new LoadBuildBrowserFrame();
        loadBuildBrowser.setVisible(true);
        loadBuildBrowser.repaint();
        //LoadBuildBrowserFrame.main(new String[0]);
    }

    /**
     * Depending upon the login state and what test entity is selected disable
     * or enable the appropriate buttons.
     */
    public void refreshButtons() {
        boolean isLoggedIn = ((getExecutor().getSession() != null) && getExecutor().getSession().isConnected());
        TestEntity entity = getSelectedEntity();

        if (isLoggedIn || ((entity == null) || !entity.requiresDatabase())) {
            getSetupButton().setEnabled(true);
            getResetButton().setEnabled(true);
            getRunTestButton().setEnabled(true);
        } else {
            getSetupButton().setEnabled(false);
            getResetButton().setEnabled(false);
            getRunTestButton().setEnabled(false);
        }
        getLoginChoice().setEnabled(!isLoggedIn);
    }

    /**
     * Reset the models from code.
     */
    public void refreshModels() {
        showBusyCursor();
        try {
            setupDefaultModels();
            resetModels();
            getExecutor().initializeConfiguredSystems();
            getExecutor().resetLoadedModels();
            getExecutor().addLoadedModels(getModels());
        } finally {
            showNormalCursor();
        }
    }

    /**
     * Reset the models from code.
     */
    public void refreshTests() {
        showBusyCursor();
        try {
            setupDefaultModels();
            resetModels();
            getExecutor().resetLoadedModels();
            getExecutor().addLoadedModels(getModels());
        } finally {
            showNormalCursor();
        }
    }

    /**
     * Set default login information.
     */
    public void resetLogin() {
        getLoginChoice().addItem("Last Login Used");
        getLoginChoice().addItem("Local Oracle DB (thin)");
        getLoginChoice().addItem("Oracle 11gR2 (thin)");
        getLoginChoice().addItem("Oracle 11gR1 (thin)");
        getLoginChoice().addItem("Oracle 11gR1 - Austin (thin)");
        getLoginChoice().addItem("Oracle (OCI)");
        getLoginChoice().addItem("TimesTen - coredev1");
        getLoginChoice().addItem("TimesTen - coredev2");
        getLoginChoice().addItem("DB2 (App)");
        getLoginChoice().addItem("DB2 (Net)");
        getLoginChoice().addItem("DB2 (Universal Driver)");
        getLoginChoice().addItem("DB2 (DataDirect)");
        getLoginChoice().addItem("Derby");
        getLoginChoice().addItem("HSQL");
        getLoginChoice().addItem("H2");
        getLoginChoice().addItem("PostgreSQL");
        getLoginChoice().addItem("Informix IDS 11.1");
        getLoginChoice().addItem("Sybase (JConnect)");
        getLoginChoice().addItem("Sybase (DataDirect)");
        getLoginChoice().addItem("MySQL (Connector/J) - COREDEV1");
        getLoginChoice().addItem("MySQL (Connector/J) - COREDEV2");
        getLoginChoice().addItem("SQLServer (DataDirect)");
        getLoginChoice().addItem("SQLServer (MS JDBC)");
        getLoginChoice().addItem("SQLServer (Weblogic Thin)");
        getLoginChoice().addItem("Symfoware (RDB2_TCP)");

        loginChanged();
    }

    /**
     * Reset the list panes on the subclasses of TestModel.
     */
    public void resetModels() {
        TestEntityTreeModel model = new TestEntityTreeModel(getModels());
        getTestsTree().setModel(model);
        getTestsTree().repaint();
    }

    /**
     * Setup the model to allow its test cases to become visible.
     */
    public void resetTest() {
        showBusyCursor();

        try {
            TestEntity test = getSelectedEntity();
            if ((!(test instanceof TestCollection))) {
                return;
            }
            test.resetEntity();
            resetModels();
            // Reset the session inspectors session as test model reset builds clean session.
            getSessionInspectorPanel().setSession(getExecutor().getSession());
        } finally {
            showNormalCursor();
        }
    }

    /**
     * Perform the selected test.
     */
    public void runTest() {
        junit.framework.Test test;
        showBusyCursor();

        if ((test = getSelectedTest()) == null) {
            return;
        }

        // Set the login to ensure correct in load build system.
        try {
            if(getExecutor().getSession().getDatasourceLogin() instanceof DatabaseLogin && getExecutor().getSession().getLogin().getConnector() instanceof DefaultConnector) {
                LoadBuildSystem.loadBuild.loginChoice = getExecutor().getSession().getLogin().getConnectionString();
            }
        } catch (Exception isDatasourceLogin) {
            // Ignore, but can't check first because need to support running 9.0.4.
        }
        // Configure the JPA tests login and logging.
        Map<String, String> properties = org.eclipse.persistence.testing.framework.junit.JUnitTestCaseHelper.getDatabaseProperties();
        if(getExecutor().getSession().getDatasourceLogin() instanceof DatabaseLogin && getExecutor().getSession().getLogin().getConnector() instanceof DefaultConnector) {
            properties.put(PersistenceUnitProperties.JDBC_DRIVER, getExecutor().getSession().getLogin().getDriverClassName());
            properties.put(PersistenceUnitProperties.JDBC_URL, getExecutor().getSession().getLogin().getConnectionString());
            properties.put(PersistenceUnitProperties.TARGET_DATABASE, getExecutor().getSession().getDatasourceLogin().getPlatform().getClass().getName());
            properties.put(PersistenceUnitProperties.JDBC_USER, getExecutor().getSession().getDatasourceLogin().getUserName());
            properties.put(PersistenceUnitProperties.JDBC_PASSWORD, getExecutor().getSession().getDatasourceLogin().getPassword());
            properties.put(PersistenceUnitProperties.LOGGING_LEVEL, getExecutor().getSession().getSessionLog().getLevelString());

            for(Map map : org.eclipse.persistence.testing.framework.junit.JUnitTestCaseHelper.puPropertiesMap.values()) {
                if (map.containsKey(PersistenceUnitProperties.LOGGING_LEVEL)) {
                    map.put(PersistenceUnitProperties.LOGGING_LEVEL, getExecutor().getSession().getSessionLog().getLevelString());
                }
            }
        }
        TestExecutor.setDefaultJUnitTestResult(null);
        TestExecutor.setJUnitTestResults(null);
        setExecutionThread(new SynchronizedTestExecutor(getExecutor(), test, this));
        getExecutionThread().start();
        getStopButton().setEnabled(true);
        getKillButton().setEnabled(true);
    }

    public void saveLoadBuild() {
        if ((LoadBuildSystem.loadBuild == null) || LoadBuildSystem.loadBuild.isEmpty()) {
            return;
        }
        showBusyCursor();
        LoadBuildSystem loadBuildSystem = new LoadBuildSystem();
        loadBuildSystem.saveLoadBuild();
        showNormalCursor();
    }

    /**
     * The run is the currently executing test model.
     */
    public void setCurrentRun(junit.framework.Test currentRun) {
        this.currentRun = currentRun;
    }

    /**
     * Set the execution thread.
     */
    protected void setExecutionThread(SynchronizedTestExecutor thread) {
        executionThread = thread;
    }

    /**
     * Set the test executor.
     */
    public void setExecutor(TestExecutor executor) {
        this.executor = executor;
    }

    /**
     * Return the loaded models.
     */
    public void setModels(Vector<TestModel> models) {
        this.models = models;
    }

    /**
     * The lists must be refreshed when first open.
     */
    public void setup() {
        showBusyCursor();
        try {
            DatabaseSession session = new Project(new DatabaseLogin()).createDatabaseSession();
            setExecutor(new TestExecutor());
            getExecutor().setListener(this);
            getExecutor().setSession(session);
            getSessionInspectorPanel().setSession(session);
            setupDefaultModels();
            resetModels();
            resetLogin();
            handleErrorsChanged();
            loginChanged();
            getLogOnlyErrorsCheckBox().setSelected(true);
        } finally {
            showNormalCursor();
        }
    }

    /**
     * Reset the models from code.
     */
    public void setupDefaultModels() {
        Vector<TestModel> allModels = new Vector<>();

        // Look for standard tests.
        try {
            Class<?> testModelClass = Class.forName("org.eclipse.persistence.testing.tests.TestRunModel");
            Method buildTestsMethod = testModelClass.getMethod("buildAllModels");
            @SuppressWarnings({"unchecked"})
            Vector<TestModel> result = (Vector<TestModel>)buildTestsMethod.invoke(null, new Object[0]);
            Helper.addAllToVector(allModels, result);
        } catch (Exception exception) {
            System.out.println("Problems loading BasicTestModel " + exception);
            exception.printStackTrace();
        }

        setModels(allModels);
    }

    /**
     * Setup the model to allow its test cases to become visible.
     */
    public void setupTest() {
        showBusyCursor();

        TestEntity entity = getSelectedEntity();
        if ((!(entity instanceof TestCollection))) {
            showNormalCursor();
            return;
        }
        TestCollection test = (TestCollection)entity;

        test.setExecutor(getExecutor());
        setExecutionThread(new SynchronizedTestExecutor(getExecutor(), test, this));
        getExecutionThread().setShouldRunSetupOnly(true);
        getExecutionThread().start();
        getStopButton().setEnabled(true);
        getKillButton().setEnabled(true);
    }

    /**
     * Change to the busy cursor.
     */
    public void showBusyCursor() {
        Container parent = this;
        while (parent != null) {
            parent.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
            parent = parent.getParent();
        }
    }

    /**
     * Change from the busy cursor.
     */
    public void showNormalCursor() {
        Container parent = this;
        while (parent != null) {
            parent.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
            parent = parent.getParent();
        }
    }

    /**
     * Stop the selected test.
     */
    public void stopTest() {
        if (getExecutionThread() != null) {
            getExecutionThread().stopExecution();
        } else {
            finishedTest();
        }
    }

    /**
     * Increment the errors bar.
     */
    @Override
    public void addError(junit.framework.Test test, Throwable error) {
        if (!getExecutor().shouldHandleErrors()) {
            throw new TestErrorException(error.getMessage(), error);
        }
        getErrorsProgressBar().setValue(getErrorsProgressBar().getValue() + 1);
        // Expand the errors size if maxed out.
        if (getErrorsProgressBar().getValue() >= getErrorsProgressBar().getMaximum()) {
            getErrorsProgressBar().setMaximum(getErrorsProgressBar().getMaximum() * 2);
        }
    }

    /**
     * Increment the errors bar.
     */
    @Override
    public void addFailure(junit.framework.Test test, junit.framework.AssertionFailedError error) {
        if (!getExecutor().shouldHandleErrors()) {
            throw new TestErrorException(error.getMessage(), error);
        }
        getErrorsProgressBar().setValue(getErrorsProgressBar().getValue() + 1);
        // Expand the errors size if maxed out.
        if (getErrorsProgressBar().getValue() >= getErrorsProgressBar().getMaximum()) {
            getErrorsProgressBar().setMaximum(getErrorsProgressBar().getMaximum() * 2);
        }
    }

    /**
     * Move the progress bar.
     */
    @Override
    public void endTest(junit.framework.Test test) {
        getRunModelProgressBar().setValue(getRunModelProgressBar().getValue() + 1);
        if (test instanceof TestEntity) {
            TestEntity testEntity = (TestEntity)test;
            if ((testEntity instanceof TestCase) && (((TestCase)testEntity).getTestResult().hasFailed())) {
                getErrorsProgressBar().setValue(getErrorsProgressBar().getValue() + 1);
            } else if ((testEntity instanceof TestCollection) && ((TestResultsSummary)testEntity.getReport()).didSetupFail()) {
                getErrorsProgressBar().setValue(getErrorsProgressBar().getValue() + 1);
            }
            // Expand the errors size if maxed out.
            if (getErrorsProgressBar().getValue() >= getErrorsProgressBar().getMaximum()) {
                getErrorsProgressBar().setMaximum(getErrorsProgressBar().getMaximum() * 2);
            }
            if (testEntity.getContainer() == getCurrentRun()) {
                getRunProgressBar().setMaximum(((TestCollection)testEntity.getContainer()).getTests().size());
                getRunProgressBar().setValue(getRunProgressBar().getValue() + 1);
            }
        }
        // Reset the session inspectors session as test model reset builds clean session.
        getSessionInspectorPanel().setSession(getExecutor().getSession());
    }

    /**
     * Move the progress bar.
     */
    @Override
    public void startTest(junit.framework.Test test) {
        if (test instanceof junit.framework.TestSuite) {
            junit.framework.TestSuite suite = (junit.framework.TestSuite)test;
            getRunModelProgressBar().setValue(0);
            getRunModelProgressBar().setMaximum(suite.countTestCases());
            getCurrentSuiteTextField().setText(suite.getName());
            if (getCurrentRun() == null) {
                setCurrentRun(test);
                getRunProgressBar().setValue(0);
                getRunProgressBar().setMaximum(suite.countTestCases());
                getErrorsProgressBar().setMaximum(10);
                getErrorsProgressBar().setValue(0);
            }
            getCurrentTestTextField().setText(suite.getName());
        } else if (test instanceof junit.framework.TestCase) {
            getCurrentTestTextField().setText(((junit.framework.TestCase)test).getName());
            if (!(test instanceof TestEntity)) {
                getCurrentSuiteTextField().setText(Helper.getShortClassName(test.getClass()));
            }
        }
    }

    class TestBrowserEventHandler implements ActionListener, ItemListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            try {
                if (e.getSource() == TestingBrowserPanel.this.getRunTestButton()) {
                    runTest();
                }
                if (e.getSource() == TestingBrowserPanel.this.getSetupButton()) {
                    setupTest();
                }
                if (e.getSource() == TestingBrowserPanel.this.getStopButton()) {
                    stopTest();
                }
                if (e.getSource() == TestingBrowserPanel.this.getKillButton()) {
                    killTest();
                }
                if (e.getSource() == TestingBrowserPanel.this.getResetButton()) {
                    resetTest();
                }
                if (e.getSource() == TestingBrowserPanel.this.getLoadBuildButton()) {
                    queryLoadBuild();
                }
            } catch (Throwable exception) {
                handleException(exception);
            }
        }

        @Override
        public void itemStateChanged(ItemEvent e) {
            try {
                if (e.getSource() == TestingBrowserPanel.this.getHandleErrorsCheckBox()) {
                    handleErrorsChanged();
                }
                if (e.getSource() == TestingBrowserPanel.this.getRunFastCheckBox()) {
                    runFastChanged();
                }
                if (e.getSource() == TestingBrowserPanel.this.getLogOnlyErrorsCheckBox()) {
                    logOnlyErrorsChanged();
                }
                if (e.getSource() == TestingBrowserPanel.this.getLoginChoice()) {
                    loginChanged();
                }
            } catch (Throwable exception) {
                handleException(exception);
            }
        }
    }
}
