org.datacleaner.widgets.result.CategorizationResultSwingRenderer Maven / Gradle / Ivy
/**
* DataCleaner (community edition)
* Copyright (C) 2014 Free Software Foundation, Inc.
*
* This copyrighted material is made available to anyone wishing to use, modify,
* copy, or redistribute it subject to the terms and conditions of the GNU
* Lesser General Public License, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution; if not, write to:
* Free Software Foundation, Inc.
* 51 Franklin Street, Fifth Floor
* Boston, MA 02110-1301 USA
*/
package org.datacleaner.widgets.result;
import java.util.Collection;
import javax.swing.JComponent;
import javax.swing.JSplitPane;
import javax.swing.table.DefaultTableModel;
import org.datacleaner.api.RendererBean;
import org.datacleaner.panels.DCPanel;
import org.datacleaner.result.AnnotatedRowsResult;
import org.datacleaner.result.CategorizationResult;
import org.datacleaner.result.renderer.SwingRenderingFormat;
import org.datacleaner.util.ChartUtils;
import org.datacleaner.util.WidgetUtils;
import org.datacleaner.widgets.table.DCTable;
import org.jdesktop.swingx.VerticalLayout;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;
@RendererBean(SwingRenderingFormat.class)
public class CategorizationResultSwingRenderer extends AbstractCategorizationResultSwingRenderer {
public CategorizationResultSwingRenderer() {
}
@Override
protected void addExtraValue(final Object extraData, final int row, final DefaultTableModel model,
final String desc, final int count, final AnnotatedRowsResult sampleResult) {
((DefaultPieDataset) extraData).setValue(desc, count);
}
@Override
public JComponent render(final CategorizationResult analyzerResult) {
final DefaultPieDataset dataset = new DefaultPieDataset();
final Collection categoryNames = analyzerResult.getCategoryNames();
for (final String categoryName : categoryNames) {
final Number count = analyzerResult.getCategoryCount(categoryName);
dataset.setValue(categoryName, count);
}
final DefaultTableModel model = prepareModel(analyzerResult, dataset);
final DCTable table = new DCTable(model);
table.setColumnControlVisible(false);
table.setRowHeight(22);
final JFreeChart chart = ChartFactory.createPieChart(null, dataset, true, false, false);
ChartUtils.applyStyles(chart);
final ChartPanel chartPanel = ChartUtils.createPanel(chart, false);
final DCPanel leftPanel = WidgetUtils.decorateWithShadow(chartPanel);
final DCPanel rightPanel = new DCPanel();
rightPanel.setLayout(new VerticalLayout());
rightPanel.add(WidgetUtils.decorateWithShadow(table.toPanel()));
final JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
split.setOpaque(false);
split.add(leftPanel);
split.add(rightPanel);
split.setDividerLocation(550);
return split;
}
}