/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common Development
* and Distribution License("CDDL") (collectively, the "License"). You
* may not use this file except in compliance with the License. You can
* obtain a copy of the License at
* https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
* or packager/legal/LICENSE.txt. See the License for the specific
* language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each
* file and include the License file at packager/legal/LICENSE.txt.
*
* GPL Classpath Exception:
* Oracle designates this particular file as subject to the "Classpath"
* exception as provided by Oracle in the GPL Version 2 section of the License
* file that accompanied this code.
*
* Modifications:
* If applicable, add the following below the License Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyright [year] [name of copyright owner]"
*
* Contributor(s):
* If you wish your version of this file to be governed by only the CDDL or
* only the GPL Version 2, indicate your decision by adding "[Contributor]
* elects to include this software in this distribution under the [CDDL or GPL
* Version 2] license." If you don't indicate a single choice of license, a
* recipient has the option to distribute your version of this file under
* either the CDDL, the GPL Version 2 or to extend the choice of license to
* its licensees as provided above. However, if you add GPL Version 2 code
* and therefore, elected the GPL Version 2 license, then the option applies
* only if the new code is made subject to such option by the copyright
* holder.
*/
package com.sun.enterprise.tools.verifier.gui;
import javax.swing.BorderFactory;
import javax.swing.DefaultCellEditor;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Enumeration;
import java.util.EventObject;
import java.util.Vector;
import java.util.logging.LogRecord;
import com.sun.enterprise.tools.verifier.CheckMgr;
import com.sun.enterprise.tools.verifier.Result;
import com.sun.enterprise.tools.verifier.StringManagerHelper;
import com.sun.enterprise.tools.verifier.VerifierEventsListener;
import com.sun.enterprise.tools.verifier.util.VerifierConstants;
public class ResultsPanel extends JPanel implements VerifierEventsListener {
JTable table;
DefaultTableModel tableModel;
JScrollPane tableScrollPane;
JScrollPane textScrollPane;
JTextArea detailText;
Vector<String> details = new Vector<String>();
private Vector<Result> passResults = new Vector<Result>();
private Vector<Result> failResults = new Vector<Result>();
private Vector<LogRecord> errorResults = new Vector<LogRecord>();
private Vector<Result> warnResults = new Vector<Result>();
private Vector<Result> naResults = new Vector<Result>();
private Vector<Result> notImplementedResults = new Vector<Result>();
private Vector<Result> notRunResults = new Vector<Result>();
private Vector<Result> defaultResults = new Vector<Result>();
private static final com.sun.enterprise.util.LocalStringManagerImpl smh =
StringManagerHelper.getLocalStringsManager();
//final String[] columnNames = {"Item", "Test Name", "Result"};
final String[] columnNames = {
(smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ResultsPanel" + // NOI18N
".columnName1", // NOI18N
"Item")), // NOI18N
(smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ResultsPanel" + // NOI18N
".columnName2", // NOI18N
"Test Name")), // NOI18N
(smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ResultsPanel" + // NOI18N
".columnName3", // NOI18N
"Result"))}; // NOI18N
final String errStr = smh.getLocalString(getClass().getName()+".errStr", // NOI18N
"Error during verification"); // NOI18N
final String errStr1 = smh.getLocalString(getClass().getName()+".errStr1", // NOI18N
"ERROR"); // NOI18N
public ResultsPanel() {
setLayout(new BorderLayout());
setBorder(
BorderFactory.createTitledBorder(
BorderFactory.createLineBorder(Color.black),
(smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ResultsPanel" + // NOI18N
".ResultsPanelLabel", // NOI18N
"Results: (Click on Item to show test Details below)")))); // NOI18N
// 508 compliance
this.getAccessibleContext().setAccessibleName(
smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ResultsPanel" + // NOI18N
".panelName", // NOI18N
"Panel")); // NOI18N
this.getAccessibleContext().setAccessibleDescription(
smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ResultsPanel" + // NOI18N
".PanelDesc", // NOI18N
"This is a panel")); // NOI18N
CheckMgr.addVerifierEventsListener(this);
// set up result table
tableModel = new DefaultTableModel(columnNames, 0);
table = new JTable(tableModel);
// 508 for JTable
table.getAccessibleContext().setAccessibleName(
smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ResultsPanel" + // NOI18N
".tableName", // NOI18N
"Table")); // NOI18N
table.getAccessibleContext().setAccessibleDescription(
smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ControlPanel" + // NOI18N
".tableDesc", // NOI18N
"This is a table of items")); // NOI18N
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
tableScrollPane = new JScrollPane(table);
// 508 for JScrollPane
tableScrollPane.getAccessibleContext().setAccessibleName(
smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ResultsPanel" + // NOI18N
".scrName1", // NOI18N
"Scroll Pane")); // NOI18N
tableScrollPane.getAccessibleContext().setAccessibleDescription(
smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ControlPanel" + // NOI18N
".scrDesc1", // NOI18N
"This is a scroll pane that helps to scroll the list")); // NOI18N
sizeTableColumns();
// make the cells uneditable
JTextField field = new JTextField();
// 508 for JTextField
field.getAccessibleContext().setAccessibleName(
smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ResultsPanel" + // NOI18N
".fielsName", // NOI18N
"Text Field")); // NOI18N
field.getAccessibleContext().setAccessibleDescription(
smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ControlPanel" + // NOI18N
".fieldDesc", // NOI18N
"This is a text field")); // NOI18N
table.setDefaultEditor(Object.class, new DefaultCellEditor(field) {
public boolean isCellEditable(EventObject anEvent) {
return false;
}
});
// add action listener to table to show details
table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
if (!e.getValueIsAdjusting()) {
if (table.getSelectionModel().isSelectedIndex(
e.getLastIndex())) {
setDetailText(
(String) details.elementAt(e.getLastIndex()));
} else if (table.getSelectionModel().isSelectedIndex(
e.getFirstIndex())) {
setDetailText(
(String) details.elementAt(e.getFirstIndex()));
}
}
}
});
// create detail text area
detailText = new JTextArea(4, 50);
// 508 for JTextArea
detailText.getAccessibleContext().setAccessibleName(
smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ResultsPanel" + // NOI18N
".areaName", // NOI18N
"Text Area")); // NOI18N
detailText.getAccessibleContext().setAccessibleDescription(
smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ControlPanel" + // NOI18N
".areaDesc", // NOI18N
"This is a text area")); // NOI18N
detailText.setEditable(false);
textScrollPane = new JScrollPane(detailText);
// 508 for JScrollPane
textScrollPane.getAccessibleContext().setAccessibleName(
smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ResultsPanel" + // NOI18N
".scrName2", // NOI18N
"Scroll Pane")); // NOI18N
textScrollPane.getAccessibleContext().setAccessibleDescription(
smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ControlPanel" + // NOI18N
".scrDesc2", // NOI18N
"This is a scroll pane that helps to scroll the list")); // NOI18N
textScrollPane.setBorder(
BorderFactory.createTitledBorder(
BorderFactory.createEmptyBorder(),
(smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ResultsPanel" + // NOI18N
".DetailsPanelLabel", // NOI18N
"Details:")))); // NOI18N
//add the components to the panel
add("Center", tableScrollPane); // NOI18N
add("South", textScrollPane); // NOI18N
// Register a listener for the report level radio buttons.
// to allow post-processing filtering
RadioListener myListener = new RadioListener();
ControlPanel.addRadioButtonListener((ActionListener) myListener);
}
class RadioListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (e.getSource() == ControlPanel.allButton) {
if ((getPassResultsForDisplay().size() > 0) ||
(getFailResultsForDisplay().size() > 0) ||
(getErrorResultsForDisplay().size() > 0) ||
(getWarnResultsForDisplay().size() > 0) ||
(getNaResultsForDisplay().size() > 0) ||
(getNotImplementedResultsForDisplay().size() > 0) ||
(getNotRunResultsForDisplay().size() > 0) ||
(getDefaultResultsForDisplay().size() > 0)) {
upDateDisplay(VerifierConstants.ALL);
} else {
clearResults();
}
}
if (e.getSource() == ControlPanel.failButton) {
if (getFailResultsForDisplay().size() > 0 ||
getErrorResultsForDisplay().size() > 0) {
upDateDisplay(VerifierConstants.FAIL);
} else {
clearResults();
}
}
if (e.getSource() == ControlPanel.warnButton) {
if ((getFailResultsForDisplay().size() > 0) ||
(getErrorResultsForDisplay().size() > 0) ||
(getWarnResultsForDisplay().size() > 0)) {
upDateDisplay(VerifierConstants.WARN);
} else {
clearResults();
}
}
}
}
public void setDetailText(String details) {
detailText.setText(details);
JScrollBar scrollBar = textScrollPane.getVerticalScrollBar();
if (scrollBar != null) {
scrollBar.setValue(0);
}
}
public void addDetailText(String details) {
detailText.append(details);
}
public void clearResults() {
//clear the table
tableModel = new DefaultTableModel(columnNames, 0);
table.setModel(tableModel);
sizeTableColumns();
//clear the detail text
setDetailText("");
//clear the details Vector
details = new Vector<String>();
}
void sizeTableColumns() {
table.getColumn(
(smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ResultsPanel" + // NOI18N
".columnName1", // NOI18N
"Item"))) // NOI18N
.setMinWidth(150);
table.getColumn(
(smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ResultsPanel" + // NOI18N
".columnName1", // NOI18N
"Item"))) // NOI18N
.setMaxWidth(200);
table.getColumn(
(smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ResultsPanel" + // NOI18N
".columnName1", // NOI18N
"Item"))) // NOI18N
.setPreferredWidth(180);
table.getColumn(
(smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ResultsPanel" + // NOI18N
".columnName2", // NOI18N
"Test Name"))) // NOI18N
.setMinWidth(150);
table.getColumn(
(smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ResultsPanel" + // NOI18N
".columnName2", // NOI18N
"Test Name"))) // NOI18N
.setPreferredWidth(180);
table.getColumn(
(smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ResultsPanel" + // NOI18N
".columnName3", // NOI18N
"Result"))) // NOI18N
.setMinWidth(120);
table.getColumn(
(smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ResultsPanel" + // NOI18N
".columnName3", // NOI18N
"Result"))) // NOI18N
.setMaxWidth(200);
table.getColumn(
(smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ResultsPanel" + // NOI18N
".columnName3", // NOI18N
"Result"))) // NOI18N
.setPreferredWidth(160);
table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
table.sizeColumnsToFit(0);
}
private void upDateDisplayAll() {
upDateDisplayFail();
upDateDisplayWarn();
upDateDisplayPass();
upDateDisplayNa();
upDateDisplayNotImplemented();
upDateDisplayNotRun();
upDateDisplayDefault();
upDateDisplayError();
}
private void updateTableRows(Vector results) {
String status;
// update display approriately
for (int i = 0; i < results.size(); i++) {
Result r = ((Result) results.elementAt(i));
StringBuffer s = new StringBuffer(
"Assertion:" + r.getAssertion() + "\n"); // NOI18N
switch (r.getStatus()) {
case Result.PASSED:
{
status =
(smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ResultsPanel" + // NOI18N
".Status_Passed", // NOI18N
"Passed")); // NOI18N
Enumeration e = r.getGoodDetails().elements();
while (e.hasMoreElements()) {
s.append((String) e.nextElement());
s.append("\n"); // NOI18N
}
break;
}
case Result.FAILED:
{
status =
(smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ResultsPanel" + // NOI18N
".Status_Failed", // NOI18N
"FAILED")); // NOI18N
Enumeration e = r.getErrorDetails().elements();
while (e.hasMoreElements()) {
s.append((String) e.nextElement());
s.append("\n"); // NOI18N
}
break;
}
case Result.WARNING:
{
status =
(smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ResultsPanel" + // NOI18N
".Status_Warning", // NOI18N
"WARNING")); // NOI18N
Enumeration e = r.getWarningDetails().elements();
while (e.hasMoreElements()) {
s.append((String) e.nextElement());
s.append("\n"); // NOI18N
}
break;
}
case Result.NOT_APPLICABLE:
{
status =
(smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ResultsPanel" + // NOI18N
".Status_NotApplicable", // NOI18N
"Not Applicable")); // NOI18N
Enumeration e = r.getNaDetails().elements();
while (e.hasMoreElements()) {
s.append((String) e.nextElement());
s.append("\n"); // NOI18N
}
break;
}
case Result.NOT_IMPLEMENTED:
status =
(smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ResultsPanel" + // NOI18N
".Status_NotImplemented", // NOI18N
"Not Implemented")); // NOI18N
break;
case Result.NOT_RUN:
status =
(smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ResultsPanel" + // NOI18N
".Status_NotRun", // NOI18N
"Not Run")); // NOI18N
break;
default:
status =
(smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ResultsPanel" + // NOI18N
".Status_Unknown", // NOI18N
"Unknown")); // NOI18N
break;
}
details.add(s.toString());
Object[] row = {r.getComponentName(), r.getTestName(), status};
tableModel.addRow(row);
}//for
table.sizeColumnsToFit(0);
}
private void upDateDisplayPass() {
updateTableRows(getPassResultsForDisplay());
}
private void upDateDisplayFail() {
updateTableRows(getFailResultsForDisplay());
}
private void upDateDisplayError() {
Vector errors = getErrorResultsForDisplay();
for (int i = 0; i < errors.size(); i++) {
LogRecord r = (LogRecord) errors.elementAt(i);
details.add(r.getMessage() + "\n" + r.getThrown().getMessage()); // NOI18N
Object[] row = {r.getLoggerName(), errStr, errStr1};
tableModel.addRow(row);
}
table.sizeColumnsToFit(0);
}
private void upDateDisplayWarn() {
updateTableRows(getWarnResultsForDisplay());
}
private void upDateDisplayNa() {
updateTableRows(getNaResultsForDisplay());
}
private void upDateDisplayNotImplemented() {
updateTableRows(getNotImplementedResultsForDisplay());
}
private void upDateDisplayNotRun() {
updateTableRows(getNotRunResultsForDisplay());
}
private void upDateDisplayDefault() {
updateTableRows(getDefaultResultsForDisplay());
}
void addError(LogRecord r) {
saveErrorResultsForDisplay(r);
details.add(r.getMessage() + "\n" + r.getThrown().getMessage()); // NOI18N
// create a table row for this result
Object[] row = {r.getLoggerName(), errStr, errStr1};
tableModel.addRow(row);
table.sizeColumnsToFit(0);
}
public void upDateDisplay(int status) {
// update display approriately
clearResults();
if (status == VerifierConstants.ALL) {
upDateDisplayAll();
}
if (status == VerifierConstants.FAIL) {
upDateDisplayError();
upDateDisplayFail();
}
if (status == VerifierConstants.WARN) {
upDateDisplayError();
upDateDisplayFail();
upDateDisplayWarn();
}
}
private void savePassResultsForDisplay(Result r) {
passResults.addElement(r);
}
private void saveWarnResultsForDisplay(Result r) {
warnResults.addElement(r);
}
private void saveFailResultsForDisplay(Result r) {
failResults.addElement(r);
}
private void saveErrorResultsForDisplay(LogRecord r) {
errorResults.addElement(r);
}
private void saveNaResultsForDisplay(Result r) {
naResults.addElement(r);
}
private void saveNotRunResultsForDisplay(Result r) {
notRunResults.addElement(r);
}
private void saveNotImplementedResultsForDisplay(Result r) {
notImplementedResults.addElement(r);
}
private void saveDefaultResultsForDisplay(Result r) {
defaultResults.addElement(r);
}
private Vector getPassResultsForDisplay() {
return passResults;
}
private Vector getWarnResultsForDisplay() {
return warnResults;
}
private Vector getFailResultsForDisplay() {
return failResults;
}
private Vector getErrorResultsForDisplay() {
return errorResults;
}
private Vector getNaResultsForDisplay() {
return naResults;
}
private Vector getNotImplementedResultsForDisplay() {
return notImplementedResults;
}
private Vector getNotRunResultsForDisplay() {
return notRunResults;
}
private Vector getDefaultResultsForDisplay() {
return defaultResults;
}
public void clearOldResults() {
passResults = new Vector<Result>();
failResults = new Vector<Result>();
errorResults = new Vector<LogRecord>();
warnResults = new Vector<Result>();
naResults = new Vector<Result>();
notImplementedResults = new Vector<Result>();
notRunResults = new Vector<Result>();
defaultResults = new Vector<Result>();
}
// We are a ChangeListener of the test harness CheckMgrs
public void testFinished(EventObject evt) {
Result r = (Result) evt.getSource();
StringBuffer s = new StringBuffer("Assertion:" + r.getAssertion() + "\n"); // NOI18N
String status;
switch (r.getStatus()) {
case Result.PASSED:
{
status =
(smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ResultsPanel" + // NOI18N
".Status_Passed", // NOI18N
"Passed")); // NOI18N
savePassResultsForDisplay(r);
Enumeration e = r.getGoodDetails().elements();
while (e.hasMoreElements()) {
s.append((String) e.nextElement());
s.append("\n"); // NOI18N
}
break;
}
case Result.FAILED:
{
status =
(smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ResultsPanel" + // NOI18N
".Status_Failed", // NOI18N
"FAILED")); // NOI18N
saveFailResultsForDisplay(r);
Enumeration e = r.getErrorDetails().elements();
while (e.hasMoreElements()) {
s.append((String) e.nextElement());
s.append("\n"); // NOI18N
}
break;
}
case Result.WARNING:
{
status =
(smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ResultsPanel" + // NOI18N
".Status_Warning", // NOI18N
"WARNING")); // NOI18N
saveWarnResultsForDisplay(r);
Enumeration e = r.getWarningDetails().elements();
while (e.hasMoreElements()) {
s.append((String) e.nextElement());
s.append("\n"); // NOI18N
}
break;
}
case Result.NOT_APPLICABLE:
{
status =
(smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ResultsPanel" + // NOI18N
".Status_NotApplicable", // NOI18N
"Not Applicable")); // NOI18N
saveNaResultsForDisplay(r);
Enumeration e = r.getNaDetails().elements();
while (e.hasMoreElements()) {
s.append((String) e.nextElement());
s.append("\n"); // NOI18N
}
break;
}
case Result.NOT_IMPLEMENTED:
{
status =
(smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ResultsPanel" + // NOI18N
".Status_NotImplemented", // NOI18N
"Not Implemented")); // NOI18N
saveNotImplementedResultsForDisplay(r);
break;
}
case Result.NOT_RUN:
{
status =
(smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ResultsPanel" + // NOI18N
".Status_NotRun", // NOI18N
"Not Run")); // NOI18N
saveNotRunResultsForDisplay(r);
break;
}
default:
{
status =
(smh.getLocalString(
"com.sun.enterprise.tools.verifier.gui.ResultsPanel" + // NOI18N
".Status_Unknown", // NOI18N
"Unknown")); // NOI18N
saveDefaultResultsForDisplay(r);
break;
}
}
// create a table row for this result
Object[] row = {r.getComponentName(), r.getTestName(), status};
if (ControlPanel.getReportLevel() == VerifierConstants.FAIL &&
r.getStatus() == Result.FAILED) {
details.add(s.toString());
tableModel.addRow(row);
}
if (ControlPanel.getReportLevel() == VerifierConstants.WARN &&
(r.getStatus() == Result.FAILED ||
r.getStatus() == Result.WARNING)) {
details.add(s.toString());
tableModel.addRow(row);
}
if (ControlPanel.getReportLevel() == VerifierConstants.ALL) {
details.add(s.toString());
tableModel.addRow(row);
}
}
public void allTestsFinished(EventObject e) {
// do nothing for now
}
}