All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.ggp.base.apps.validator.OutcomePanel Maven / Gradle / Ivy

The newest version!
package org.ggp.base.apps.validator;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.util.List;

import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.table.DefaultTableModel;

import org.ggp.base.apps.validator.event.ValidatorFailureEvent;
import org.ggp.base.apps.validator.event.ValidatorSuccessEvent;
import org.ggp.base.util.observer.Event;
import org.ggp.base.util.observer.Observer;
import org.ggp.base.util.ui.table.JZebraTable;
import org.ggp.base.validator.ValidatorWarning;

@SuppressWarnings("serial")
public final class OutcomePanel extends JPanel implements Observer
{

    private final JZebraTable logTable;
    private final JProgressBar progressBar;

    public OutcomePanel(int numValidators)
    {
        super(new GridBagLayout());

        DefaultTableModel model = new DefaultTableModel();
        model.addColumn("Validator");
        model.addColumn("Result");

        logTable = new JZebraTable(model)
        {
            @Override
            public boolean isCellEditable(int rowIndex, int colIndex)
            {
                return false;
            }
        };
        progressBar = new JProgressBar();

        logTable.setRowHeight(100);
        logTable.setShowHorizontalLines(true);
        logTable.setShowVerticalLines(true);
        logTable.getColumnModel().getColumn(0).setMaxWidth(150);
        logTable.getColumnModel().getColumn(0).setPreferredWidth(500);
        progressBar.setMaximum(numValidators);

        this.add(new JScrollPane(logTable, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED), new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 5, 5));
        this.add(progressBar, new GridBagConstraints(0, 1, 1, 1, 1.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 5, 5));
    }

    @Override
    public void observe(Event event)
    {
        if (event instanceof ValidatorSuccessEvent)
        {
            observeValidationSuccessEvent((ValidatorSuccessEvent) event);
        }
        else if (event instanceof ValidatorFailureEvent)
        {
            observeValidationFailureEvent((ValidatorFailureEvent) event);
        }
    }

    public static final String wrapLine(String line, int width) {
        StringBuilder wrappedLine = new StringBuilder();
        while (line.length() > width) {
            wrappedLine.append(line.substring(0, width) + "
"); line = line.substring(width); } wrappedLine.append(line); return "" + wrappedLine.toString() + ""; } private void observeValidationFailureEvent(ValidatorFailureEvent event) { DefaultTableModel model = (DefaultTableModel) logTable.getModel(); int numRows = model.getRowCount() + 1; model.addRow(new String[] { event.getName(), wrapLine(event.getException().toString(), 100) }); progressBar.setValue(numRows); System.err.println(event.getException().getMessage()); } private void observeValidationSuccessEvent(ValidatorSuccessEvent event) { DefaultTableModel model = (DefaultTableModel) logTable.getModel(); int numRows = model.getRowCount() + 1; List warnings = event.getWarnings(); if (warnings.isEmpty()) { model.addRow(new String[] { event.getName(), "Success!" }); } else { model.addRow(new String[] { event.getName(), wrapLine("Success, with warnings: " + warnings, 100) }); } progressBar.setValue(numRows); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy