package org.geogebra.common.gui.view.data;
import java.util.ArrayList;
import org.geogebra.common.kernel.algos.AlgoElement;
import org.geogebra.common.kernel.geos.GeoList;
import org.geogebra.common.kernel.geos.GeoNumeric;
import org.geogebra.common.main.App;
public class MultiVarStatTableModel extends StatTableModel {
public interface MultiVarStatTableListener extends StatTableListener {
String[] getDataTitles();
boolean isMinimalTable();
}
protected MultiVarStatTableListener getMultiVarListener() {
return (MultiVarStatTableListener) getListener();
}
public MultiVarStatTableModel(App app, MultiVarStatTableListener listener) {
super(app, listener);
}
@Override
public String[] getRowNames() {
return getMultiVarListener().getDataTitles();
}
@Override
public String[] getColumnNames() {
ArrayList<Stat> list = getStatList();
String[] names = new String[list.size()];
for (int i = 0; i < names.length; i++) {
names[i] = getStatName(list.get(i));
}
return names;
}
@Override
public int getRowCount() {
return getRowNames() == null ? 0 : getRowNames().length;
}
@Override
public int getColumnCount() {
return getColumnNames().length;
}
@Override
public ArrayList<Stat> getStatList() {
ArrayList<Stat> list = new ArrayList<Stat>();
if (getMultiVarListener().isViewValid()) {
return list;
}
if (getMultiVarListener().isMinimalTable()) {
list.add(Stat.LENGTH);
list.add(Stat.MEAN);
list.add(Stat.SAMPLE_SD);
} else {
list.add(Stat.LENGTH);
list.add(Stat.MEAN);
list.add(Stat.SD);
list.add(Stat.SAMPLE_SD);
list.add(Stat.MIN);
list.add(Stat.Q1);
list.add(Stat.MEDIAN);
list.add(Stat.Q3);
list.add(Stat.MAX);
}
return list;
}
@Override
public void updatePanel() {
GeoList dataList = getMultiVarListener().getDataSelected();
String[] titles = getMultiVarListener().getDataTitles();
ArrayList<Stat> list = getStatList();
double value;
for (int row = 0; row < titles.length; row++) {
for (int col = 0; col < list.size(); col++) {
Stat stat = list.get(col);
if (getMultiVarListener().isValidData() && stat != Stat.NULL) {
AlgoElement algo = getAlgo(stat,
(GeoList) dataList.get(row), null);
if (algo != null) {
getConstruction().removeFromConstructionList(algo);
value = ((GeoNumeric) algo.getGeoElements()[0])
.getDouble();
getMultiVarListener().setValueAt(value, row, col);
}
}
}
}
}
}