com.intellij.execution.junit2.ui.StatisticsPanel.java Source code

Java tutorial

Introduction

Here is the source code for com.intellij.execution.junit2.ui.StatisticsPanel.java

Source

/*
 * Copyright 2000-2009 JetBrains s.r.o.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.intellij.execution.junit2.ui;

import com.intellij.execution.junit2.TestProxy;
import com.intellij.execution.junit2.events.TestEvent;
import com.intellij.execution.junit2.ui.actions.TestContext;
import com.intellij.execution.junit2.ui.model.JUnitAdapter;
import com.intellij.execution.junit2.ui.model.JUnitRunningModel;
import com.intellij.execution.testframework.TestsUIUtil;
import com.intellij.openapi.actionSystem.ActionPlaces;
import com.intellij.openapi.actionSystem.DataProvider;
import com.intellij.openapi.actionSystem.IdeActions;
import com.intellij.openapi.ui.VerticalFlowLayout;
import com.intellij.ui.*;
import com.intellij.ui.table.BaseTableView;
import com.intellij.ui.table.TableView;
import com.intellij.util.EditSourceOnDoubleClickHandler;
import com.intellij.util.config.Storage;
import com.intellij.util.ui.ListTableModel;

import javax.swing.*;
import javax.swing.table.TableCellRenderer;
import java.awt.*;

class StatisticsPanel extends JPanel implements DataProvider {
    private final MyJUnitListener myListener = new MyJUnitListener();
    private TestProxy myCurrentTest = null;
    private StatisticsTable myChildInfo = null;

    //  private TestCaseStatistics myTestCaseInfo = new TestCaseStatistics(TestColumnInfo.COLUMN_NAMES);
    private JUnitRunningModel myModel;
    private final TableView myTable;
    private final Storage.PropertiesComponentStorage myStorage = new Storage.PropertiesComponentStorage(
            "junit_statistics_table_columns");
    private SimpleColoredComponent myTotalLabel;
    private SimpleColoredComponent myTimeLabel;

    public StatisticsPanel() {
        super(new BorderLayout(0, 0));
        myChildInfo = new StatisticsTable(TestColumnInfo.COLUMN_NAMES);
        myTable = new TableView(myChildInfo) {
            @Override
            public TableCellRenderer getCellRenderer(int row, int column) {
                return new TestTableRenderer(TestColumnInfo.COLUMN_NAMES);
            }
        };
        EditSourceOnDoubleClickHandler.install(myTable);
        PopupHandler.installPopupHandler(myTable, IdeActions.GROUP_TESTSTATISTICS_POPUP,
                ActionPlaces.TESTSTATISTICS_VIEW_POPUP);
        //    add(myTestCaseInfo, BorderLayout.NORTH);
        add(ScrollPaneFactory.createScrollPane(myTable), BorderLayout.CENTER);
        final JPanel eastPanel = new JPanel(new VerticalFlowLayout(VerticalFlowLayout.TOP, 0, 0, true, false));

        myTotalLabel = new SimpleColoredComponent();
        eastPanel.add(myTotalLabel);

        myTimeLabel = new SimpleColoredComponent();
        eastPanel.add(myTimeLabel);

        add(eastPanel, BorderLayout.SOUTH);
    }

    private void updateStatistics() {
        myTable.setVisible(true);
        //    myTestCaseInfo.setVisible(false);
        TestProxy proxy = myCurrentTest != null ? myCurrentTest : myModel.getRoot();
        if (proxy.isLeaf() && proxy.getParent() != null) {
            proxy = proxy.getParent();
        }
        myChildInfo.updateStatistics(proxy);
        myTotalLabel.clear();
        myTotalLabel.append(TestsUIUtil.getTestSummary(proxy), SimpleTextAttributes.REGULAR_BOLD_ATTRIBUTES);
        myTimeLabel.clear();
        myTimeLabel.append("Total time: " + Formatters.statisticsFor(proxy).getTime(),
                SimpleTextAttributes.REGULAR_BOLD_ATTRIBUTES);
        final int idx = myChildInfo.getIndexOf(myCurrentTest);
        if (idx >= 0)
            TableUtil.selectRows(myTable, new int[] { myTable.convertRowIndexToView(idx) });
        TableUtil.scrollSelectionToVisible(myTable);
    }

    public void attachTo(final JUnitRunningModel model) {
        myModel = model;
        myModel.addListener(myListener);
        myChildInfo.setModel(model);
        BaseTableView.restore(myStorage, myTable);
    }

    public Object getData(final String dataId) {
        if (myModel == null)
            return null;
        final int selectedRow = myTable.getSelectedRow();
        final TestProxy selectedTest = selectedRow == -1 ? null
                : myChildInfo.getTestAt(myTable.convertRowIndexToModel(selectedRow));
        if (TestContext.DATA_KEY.is(dataId)) {
            return new TestContext(myModel, selectedTest);
        }
        return TestsUIUtil.getData(selectedTest, dataId, myModel);
    }

    private class MyJUnitListener extends JUnitAdapter {
        public void onTestChanged(final TestEvent event) {
            if (!StatisticsPanel.this.isShowing())
                return;
            final TestProxy source = event.getSource();
            if (myCurrentTest == source || myCurrentTest == null && source == myModel.getRoot()) {
                updateStatistics();
            }
        }

        public void onTestSelected(final TestProxy test) {
            if (!StatisticsPanel.this.isShowing())
                return;
            if (myCurrentTest == test)
                return;
            if (test == null) {
                myTable.setVisible(false);
                return;
            }
            myCurrentTest = test;
            updateStatistics();
        }

        public void doDispose() {
            BaseTableView.store(myStorage, myTable);
            myTable.setModelAndUpdateColumns(new ListTableModel(TestColumnInfo.COLUMN_NAMES));
            myModel = null;
            myChildInfo = null;
            myCurrentTest = null;
        }
    }
}