gt: 		return dataTableViewerTable.getCell(row, column);
context: /*
   *  RapidMiner
   *
   *  Copyright (C) 2001-2014 by RapidMiner and the contributors
   *
   *  Complete list of developers available at our web site:
   *
   *       http://rapidminer.com
   *
   *  This program is free software: you can redistribute it and/or modify
   *  it under the terms of the GNU Affero General Public License as published by
   *  the Free Software Foundation, either version 3 of the License, or
   *  (at your option) any later version.
   *
   *  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 Affero General Public License for more details.
   *
   *  You should have received a copy of the GNU Affero General Public License
   *  along with this program.  If not, see http://www.gnu.org/licenses/.
   */
  package com.rapidminer.gui.viewer;
  
  import java.awt.BorderLayout;
  import java.awt.CardLayout;
  import java.awt.FlowLayout;
  import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
  import java.util.LinkedHashMap;
  import java.util.Map;
  
  import javax.swing.ButtonGroup;
  import javax.swing.JLabel;
  import javax.swing.JPanel;
  import javax.swing.JRadioButton;
  import javax.swing.JScrollPane;
  
  import com.rapidminer.datatable.DataTable;
  import com.rapidminer.datatable.DataTableExampleSetAdapter;
  import com.rapidminer.datatable.DataTableListener;
  import com.rapidminer.example.ExampleSet;
  import com.rapidminer.gui.new_plotter.configuration.PlotConfiguration;
  import com.rapidminer.gui.new_plotter.data.PlotInstance;
  import com.rapidminer.gui.new_plotter.gui.ChartConfigurationPanel;
  import com.rapidminer.gui.new_plotter.gui.AbstractConfigurationPanel.DatasetTransformationType;
  import com.rapidminer.gui.new_plotter.integration.PlotConfigurationHistory;
  import com.rapidminer.gui.plotter.Plotter;
  import com.rapidminer.gui.plotter.PlotterPanel;
  import com.rapidminer.gui.plotter.PlotterConfigurationModel;
  import com.rapidminer.gui.tools.ExtendedJScrollPane;
  import com.rapidminer.operator.IOObject;
  import com.rapidminer.report.Tableable;
  
  /**
   * Can be used to display (parts of) the data by means of a JTable.
   * 
   * @author Ingo Mierswa
   */
  public class DataTableViewer extends JPanel implements Tableable, DataTableListener {
      
      private static final long serialVersionUID = 6878549119308753961L;
      
      
  	public static final String TABLE_MODE = "TABLE";
  	
  	public static final String PLOT_MODE = "PLOT";
  
  	private static final String ADVANCED_MODE = "ADVANCED";
  
      private JLabel generalInfo = new JLabel();
      
      private DataTableViewerTable dataTableViewerTable;
      
      private PlotterPanel plotterPanel;
  
  	private JPanel tablePanel;
  
  	private ChartConfigurationPanel advancedPanel;
  	
  	private PlotterConfigurationModel plotterSettings;
  
  
  	public DataTableViewer(DataTable dataTable) {
      	this(dataTable, PlotterConfigurationModel.DATA_SET_PLOTTER_SELECTION, true, TABLE_MODE, false);
      }
      
      public DataTableViewer(DataTable dataTable, boolean showPlotter) {
      	this(dataTable, PlotterConfigurationModel.DATA_SET_PLOTTER_SELECTION, showPlotter, TABLE_MODE, false);
      }
      
      public DataTableViewer(DataTable dataTable, boolean showPlotter, String startMode) {
      	this(dataTable, PlotterConfigurationModel.DATA_SET_PLOTTER_SELECTION, showPlotter, startMode, false);
      }
  
      public DataTableViewer(DataTable dataTable, LinkedHashMap<String, Class<? extends Plotter>> availablePlotters) {
      	this(dataTable, availablePlotters, true, TABLE_MODE, false);
      }
      
  	public DataTableViewer(DataTable dataTable, LinkedHashMap<String, Class<? extends Plotter>> availablePlotters, boolean showPlotter, String tableMode, boolean autoResize) {
  
  		super(new BorderLayout());
  
  		// Build table view
          this.dataTableViewerTable = new DataTableViewerTable(autoResize);
  		this.tablePanel = new JPanel(new BorderLayout());
          JPanel infoPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
          infoPanel.add(generalInfo);
          tablePanel.add(infoPanel, BorderLayout.NORTH);
  		JScrollPane tableScrollPane = new ExtendedJScrollPane(dataTableViewerTable);
  		tablePanel.add(tableScrollPane, BorderLayout.CENTER);
          
  		// Build cards
  		final CardLayout cards = new CardLayout();
  		final JPanel mainPanel = new JPanel(cards);
  		add(mainPanel, BorderLayout.CENTER);
  
  		// Add and select table as default
  		mainPanel.add(tablePanel, TABLE_MODE);
  		cards.show(mainPanel, TABLE_MODE);
          
  		// Add plotters and radio buttons if desired
          if (showPlotter) {
          	this.plotterSettings = new PlotterConfigurationModel(availablePlotters, dataTable);
          	this.plotterPanel = new PlotterPanel(plotterSettings);
  			DataTable plotData = plotterSettings.getDataTable();
  
  			// preface to create ChartConfigationPanel:
  			ExampleSet exampleSet = DataTableExampleSetAdapter.createExampleSetFromDataTable(plotData);
  			Map<DatasetTransformationType, PlotConfiguration> plotConfigurationMap = PlotConfigurationHistory.getPlotConfigurationMap((IOObject) exampleSet, plotData);
  			PlotInstance plotInstance = new PlotInstance(plotConfigurationMap.get(DatasetTransformationType.ORIGINAL), plotData);
  			this.advancedPanel = new ChartConfigurationPanel(true, plotInstance, plotData, plotConfigurationMap.get(DatasetTransformationType.DE_PIVOTED));
  
  			mainPanel.add(plotterPanel, PLOT_MODE);
  			mainPanel.add(advancedPanel, ADVANCED_MODE);
  
          	// toggle radio button for views
          	final JRadioButton tableButton = new JRadioButton("Table View", true);
          	tableButton.setToolTipText("Toggles to the table view of this model data.");
          	tableButton.addActionListener(new ActionListener() {
          		public void actionPerformed(ActionEvent e) {
          			if (tableButton.isSelected()) {
  						cards.show(mainPanel, TABLE_MODE);
  					}
          		}
          	});
          	final JRadioButton plotButton = new JRadioButton("Plot View", false);
          	plotButton.setToolTipText("Toggles to the plotter view of this model.");
          	plotButton.addActionListener(new ActionListener() {
          		public void actionPerformed(ActionEvent e) {
  
          			if (plotButton.isSelected()) {
  						cards.show(mainPanel, PLOT_MODE);
          			}
          		}
          	});
  
  			final JRadioButton advancedChartsButton = new JRadioButton("Advanced Charts", false);
  			advancedChartsButton.setToolTipText("Toggles to the advanced plot view of this model.");
  			advancedChartsButton.addActionListener(new ActionListener() {
  				public void actionPerformed(ActionEvent e) {
  					if (advancedChartsButton.isSelected()) {
  						cards.show(mainPanel, ADVANCED_MODE);
  					}
  				}
  			});
  
  
              ButtonGroup group = new ButtonGroup();
          	group.add(tableButton);
          	group.add(plotButton);
  			group.add(advancedChartsButton);
              JPanel togglePanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
          	togglePanel.add(tableButton);	
  			togglePanel.add(plotButton);
  			togglePanel.add(advancedChartsButton);
  
          	add(togglePanel, BorderLayout.NORTH);
  			// init correct mode:
  			if (tableMode.equals(TABLE_MODE)) {
  				cards.show(mainPanel, TABLE_MODE);
  				tableButton.setSelected(true);
  			} else if (tableMode.equals(PLOT_MODE)) {
  				cards.show(mainPanel, PLOT_MODE);
  				plotButton.setSelected(true);
  			} else if (tableMode.equals(ADVANCED_MODE)) {
  				cards.show(mainPanel, ADVANCED_MODE);
  				advancedChartsButton.setSelected(true);
          	}
          } // end if (showPlotter)
  
          setDataTable(dataTable);
      }
  
      public DataTable getDataTable() {
      	return plotterSettings.getDataTable();
      }
      
      public PlotterPanel getPlotterPanel() {
      	return plotterPanel;
      }
      
      public DataTableViewerTable getTable() {
          return dataTableViewerTable;
      }
      
      public void setDataTable(DataTable dataTable) {
          dataTableViewerTable.setDataTable(dataTable);
          if (plotterSettings != null) {
          	plotterSettings.setDataTable(dataTable);
          }
          
          // add listener for correct row count
          dataTable.addDataTableListener(this);
          dataTableUpdated(dataTable);
      }
      
  	public void dataTableUpdated(DataTable dataTable) {
          generalInfo.setText(dataTable.getName() + " (" + dataTable.getNumberOfRows() + " rows, " + dataTable.getNumberOfColumns() + " columns)");	
  	}
      
  	public void prepareReporting() {
  		dataTableViewerTable.prepareReporting();
  	}
  	
  	public void finishReporting() {
  		dataTableViewerTable.finishReporting();
  	}
  	
      public String getColumnName(int columnIndex) {
      	return dataTableViewerTable.getColumnName(columnIndex);
      }
  
  	public String getCell(int row, int column) {
  