org.ggp.base.apps.validator.OutcomePanel Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of alloy-ggp-base Show documentation
Show all versions of alloy-ggp-base Show documentation
A modified version of the GGP-Base library for Alloy.
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);
}
}