/*
* NCSA Data To Knowledge (D2K) Project
* Automated Learning Group
* National Center for Supercomputing Applications
* University of Illinois at Urbana-Champaign
* 605 E. Springfield, Champaign, IL 61820
*
* d2k@ncsa.uiuc.edu
*
* Copyright 2003, Board of Trustees of the University of Illinois,
* All Rights Reserved
*
* NCSA Data To Knowledge (D2K) software, source code, binary code, and Java-byte
* code including D2K modules and D2K itineraries (hereafter, Software) is
* copyrighted by the Board of Trustees of the University of Illinois (UI),
* and ownership remains with the UI.
*
* Prior to receiving this Software Source Code, You must have agreed to a
* non-exclusive, non-transferable, restricted License of Software with UI for
* limited Research Use and/or Internal Business Use. The terms of that License
* control the use of this Software Source Code. For the sake of convenience,
* certain provisions of that License are stated here. However, in the event
* of any real or perceived differences between the terms of the License and the
* statements made herein, the License controls.
*
* You may not distribute the Software including the Binary Code and this Source
* Code to third parties.
*
* You may make Derivative Works. You are encouraged to provide information to
* UI regarding Derivative Works and your experience with Software. However, if
* You make any Derivative Work based on or derived from the Software, then You
* will: (1) clearly notify users that such Derivative Work is a modified version
* and uses or is derived from the original NCSA Data To Knowledge (D2K)
* developed at UI, and include specific language in that notice as provided for
* in the License, and (2) acknowledge via citation and provide UI with a copy of
* any report or publication using the Software or Derivative Work.
*
* If You wish to make Commercial Use of the Software or Derivative Works, then
* You should contact the UI, c/o NCSA, to negotiate an appropriate license for
* such Commercial Use. Commercial Use includes sale, lease, license,
* distribution or otherwise making the Software or Derivative Works available to
* third parties, which includes, but is not limited to, integration of all or
* part of the Software or Derivative Work into a product for sale or license by
* or on behalf of You to third parties.
*
* UI MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THIS SOFTWARE FOR ANY
* PURPOSE. IT IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. THE UI
* SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY THE USERS OF THIS SOFTWARE.
*
* By using or copying this Software, You agree to abide by the copyright law
* and all other applicable laws of the U.S. including, but not limited to,
* export control laws, and the terms of the License. UI shall have the right
* to terminate its license with You immediately upon Your breach of, or
* non-compliance with, any of its terms. You may be held legally responsible
* for any copyright infringement that is caused or encouraged by Your failure
* to abide by the terms of the License.
*/
package ncsa.d2k.modules.core.vis;
import java.awt.*;
import java.io.*;
import javax.swing.*;
import ncsa.d2k.core.modules.*;
import ncsa.d2k.modules.core.datatype.table.*;
import ncsa.d2k.modules.core.vis.widgets.*;
import ncsa.d2k.userviews.swing.*;
/**
* This module creates a pie chart visualization for <i>Table</i> data.
* <p>
* One column (by default, column 0) must contain the labels of the
* components of the chart, and another column (by default, column 1) must
* contain their corresponding ratios.
*/
public class PieChart2D extends VisModule {
////////////////////////////////////////////////////////////////////////////////
// Module methods //
////////////////////////////////////////////////////////////////////////////////
public String[] getFieldNameMapping() {
return null;
}
public String getInputInfo(int index) {
if (index == 0)
return "A <i>Table</i> containing the data to be visualized.";
return "NO SUCH INPUT";
}
public String getInputName(int index) {
if (index == 0)
return "Table";
return "NO SUCH INPUT";
}
public String[] getInputTypes() {
return new String[] {"ncsa.d2k.modules.core.datatype.table.Table"};
}
public String getModuleInfo() {
StringBuffer sb = new StringBuffer("<p>Overview: ");
sb.append("This module creates a pie chart visualization from ");
sb.append("<i>Table</i> data. One column (by default, column 0) ");
sb.append("must contain the labels of components of the chart, and ");
sb.append("another column (by default, column 1) must contain their ");
sb.append("corresponding ratios.");
sb.append("</p><p>Data Type Restrictions: ");
sb.append("Negative ratio values (which make no sense for a pie chart) ");
sb.append("will lead to inconsistent results.");
sb.append("</p>");
return sb.toString();
}
public String getModuleName() {
return "2D Pie Chart";
}
public String getOutputInfo(int index) {
return "NO SUCH OUTPUT";
}
public String getOutputName(int index) {
return "NO SUCH OUTPUT";
}
public String[] getOutputTypes() {
return null;
}
protected UserView createUserView() {
return new PieChartUserPane();
}
////////////////////////////////////////////////////////////////////////////////
// properties //
////////////////////////////////////////////////////////////////////////////////
private int _labelsColumn = 0;
public int getLabelsColumn() { return _labelsColumn; }
public void setLabelsColumn(int value) { _labelsColumn = value; }
private int _ratiosColumn = 1;
public int getRatiosColumn() { return _ratiosColumn; }
public void setRatiosColumn(int value) { _ratiosColumn = value; }
private int _maxLegendRows = 5;
public int getMaxLegendRows() { return _maxLegendRows; }
public void setMaxLegendRows(int value) { _maxLegendRows = value; }
public PropertyDescription[] getPropertiesDescriptions() {
PropertyDescription[] pds = new PropertyDescription[3];
pds[0] = new PropertyDescription("labelsColumn", "Labels column",
"Specifies which column of the table contains the data labels.");
pds[1] = new PropertyDescription("ratiosColumn", "Ratios column",
"Specifies which column of the table contains the data ratios.");
pds[2] = new PropertyDescription("maxLegendRows", "Max Legend Rows",
"Specifies the maximum number of rows drawn in the chart's legend.");
return pds;
}
////////////////////////////////////////////////////////////////////////////////
// user pane //
////////////////////////////////////////////////////////////////////////////////
private class PieChartUserPane extends JUserPane {
private Dimension preferredSize = new Dimension(300, 300);
private Table table;
public void initView(ViewModule mod) { }
public void setInput(Object obj, int ind) {
table = (Table)obj;
buildView();
}
public void buildView() {
DataSet set = new DataSet("dataset", Color.gray,
_labelsColumn, _ratiosColumn);
GraphSettings settings = new GraphSettings();
String xaxis = table.getColumnLabel(_labelsColumn);
String yaxis = table.getColumnLabel(_ratiosColumn);
settings.title = xaxis + " and " + yaxis;
settings.xaxis = xaxis;
settings.yaxis = yaxis;
add(new JScrollPane(new PieChart(table, set, settings, true, _maxLegendRows)));
}
public Dimension getPreferredSize() {
return preferredSize;
}
}
}