package junit.swingui;

import javax.swing.* ;
import javax.swing.event.* ;
import javax.swing.border.* ;
import java.awt.* ;

/**
 * A panel with test run counters
 */
public class CounterPanel extends Panel {
        private JTextField fNumberOfErrors;

        private JTextField fNumberOfFailures;

        private JTextField fNumberOfRuns;

        private int fTotal;

        public CounterPanel() {
                super(new GridLayout(2, 3));
                add(new JLabel("Runs:"));
                add(new JLabel("Errors:"));
                add(new JLabel("Failures: "));
                fNumberOfErrors = createOutputField();
                fNumberOfFailures = createOutputField();
                fNumberOfRuns = createOutputField();
                add(fNumberOfRuns);
                add(fNumberOfErrors);
                add(fNumberOfFailures);
        }

        private JTextField createOutputField() {
                JTextField field = new JTextField("0", 4);
                field.setHorizontalAlignment(JTextField.LEFT);
                field.setFont(StatusLine.BOLD_FONT);
                field.setEditable(false);
                field.setBorder(BorderFactory.createEmptyBorder());
                return field;
        }

        public void reset() {
                setLabelValue(fNumberOfErrors, 0);
                setLabelValue(fNumberOfFailures, 0);
                setLabelValue(fNumberOfRuns, 0);
                fTotal = 0;
        }

        public void setTotal(int value) {
                fTotal = value;
        }

        public void setRunValue(int value) {
                fNumberOfRuns.setText(Integer.toString(value) + "/" + fTotal);
        }

        public void setErrorValue(int value) {
                setLabelValue(fNumberOfErrors, value);
        }

        public void setFailureValue(int value) {
                setLabelValue(fNumberOfFailures, value);
        }

        private String asString(int value) {
                return Integer.toString(value);
        }

        private void setLabelValue(JTextField label, int value) {
                label.setText(Integer.toString(value));
        }
}