Unit handling for CSV output. Units in with the header row now, and no units attached to values.
This commit is contained in:
parent
7affbb0ef2
commit
0004e1ca80
@ -4,6 +4,8 @@ import java.util.Comparator;
|
|||||||
|
|
||||||
import javax.swing.table.TableColumnModel;
|
import javax.swing.table.TableColumnModel;
|
||||||
|
|
||||||
|
import net.sf.openrocket.unit.UnitGroup;
|
||||||
|
|
||||||
public abstract class Column {
|
public abstract class Column {
|
||||||
private final String name;
|
private final String name;
|
||||||
private final String toolTip;
|
private final String toolTip;
|
||||||
@ -59,7 +61,9 @@ public abstract class Column {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public UnitGroup getUnits() {
|
||||||
|
return UnitGroup.UNITS_NONE;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Return the column type class. This is necessary for example for numerical
|
* Return the column type class. This is necessary for example for numerical
|
||||||
* sorting of Value objects, showing booleans as checkboxes etc.
|
* sorting of Value objects, showing booleans as checkboxes etc.
|
||||||
|
@ -31,6 +31,10 @@ public abstract class ValueColumn extends Column {
|
|||||||
return ValueComparator.INSTANCE;
|
return ValueComparator.INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public UnitGroup getUnits() {
|
||||||
|
return this.unit;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Returns the double value to show in the Value object
|
* Returns the double value to show in the Value object
|
||||||
*
|
*
|
||||||
|
@ -22,6 +22,7 @@ import java.io.IOException;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
import javax.swing.AbstractAction;
|
import javax.swing.AbstractAction;
|
||||||
import javax.swing.JButton;
|
import javax.swing.JButton;
|
||||||
@ -119,6 +120,7 @@ public class SimulationPanel extends JPanel {
|
|||||||
private final SimulationAction deleteSimulationAction;
|
private final SimulationAction deleteSimulationAction;
|
||||||
private final SimulationAction dumpSimulationTableAction;
|
private final SimulationAction dumpSimulationTableAction;
|
||||||
|
|
||||||
|
private final HashMap<String, String> valueColumnToUnitString = new HashMap<>();
|
||||||
private int[] previousSelection = null;
|
private int[] previousSelection = null;
|
||||||
private JMenuItem exportSimTableToCSVMenuItem;
|
private JMenuItem exportSimTableToCSVMenuItem;
|
||||||
|
|
||||||
@ -624,11 +626,31 @@ public class SimulationPanel extends JPanel {
|
|||||||
|
|
||||||
class DumpSimulationToCSVAction extends SimulationAction {
|
class DumpSimulationToCSVAction extends SimulationAction {
|
||||||
private String lastSelectedLocation = "";
|
private String lastSelectedLocation = "";
|
||||||
|
private HashMap<String, String> cToUnit;
|
||||||
public DumpSimulationToCSVAction() {
|
public DumpSimulationToCSVAction() {
|
||||||
putValue(NAME, trans.get("simpanel.pop.export_to_csv"));
|
putValue(NAME, trans.get("simpanel.pop.export_to_csv"));
|
||||||
putValue(SMALL_ICON, Icons.FILE_EXPORT_AS);
|
putValue(SMALL_ICON, Icons.FILE_EXPORT_AS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Means by wich the CSV export will clean up units on the values and
|
||||||
|
* describe them on the header fields instead.
|
||||||
|
*/
|
||||||
|
private void populateColumnNameToUnitsHashTable() {
|
||||||
|
if (null == simulationTableModel) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
valueColumnToUnitString.clear(); // necessary if units changed during session
|
||||||
|
for (int i=0; i<simulationTableModel.getColumnCount(); i++) {
|
||||||
|
Column c = simulationTableModel.getColumn(i);
|
||||||
|
if (c instanceof ValueColumn) {
|
||||||
|
// only value columns seem to have units that are not zero length strings... these are
|
||||||
|
// the ones we actually want in our lookup table.
|
||||||
|
valueColumnToUnitString.put(c.toString(), c.getUnits().getDefaultUnit().getUnit());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Dump data from sim table to file for run simulations
|
* Dump data from sim table to file for run simulations
|
||||||
* @param data The csv data as one string block.
|
* @param data The csv data as one string block.
|
||||||
@ -712,6 +734,7 @@ public class SimulationPanel extends JPanel {
|
|||||||
Container tableParent = simulationTable.getParent();
|
Container tableParent = simulationTable.getParent();
|
||||||
int modelColumnCount = simulationTableModel.getColumnCount();
|
int modelColumnCount = simulationTableModel.getColumnCount();
|
||||||
int modelRowCount = simulationTableModel.getRowCount();
|
int modelRowCount = simulationTableModel.getRowCount();
|
||||||
|
populateColumnNameToUnitsHashTable();
|
||||||
|
|
||||||
// I'm pretty sure with the enablement/disablement of the menu item under the File dropdown,
|
// I'm pretty sure with the enablement/disablement of the menu item under the File dropdown,
|
||||||
// that this would no longer be needed because if there is no sim table yet, the context menu
|
// that this would no longer be needed because if there is no sim table yet, the context menu
|
||||||
@ -735,6 +758,10 @@ public class SimulationPanel extends JPanel {
|
|||||||
ArrayList<String> rowColumnElement = new ArrayList<>();
|
ArrayList<String> rowColumnElement = new ArrayList<>();
|
||||||
for (int j=1; j<modelColumnCount ; j++) {
|
for (int j=1; j<modelColumnCount ; j++) {
|
||||||
String colName = simulationTable.getColumnName(j);
|
String colName = simulationTable.getColumnName(j);
|
||||||
|
String unitString = valueColumnToUnitString.get(colName);
|
||||||
|
if (unitString != null) {
|
||||||
|
colName += " (" + unitString + ")";
|
||||||
|
}
|
||||||
rowColumnElement.add(colName);
|
rowColumnElement.add(colName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -765,9 +792,15 @@ public class SimulationPanel extends JPanel {
|
|||||||
|
|
||||||
// piece together the column data for the ith row, skipping any rows with null counts > 0!
|
// piece together the column data for the ith row, skipping any rows with null counts > 0!
|
||||||
for (int j=1; j<modelColumnCount ; j++) { // skip first column
|
for (int j=1; j<modelColumnCount ; j++) { // skip first column
|
||||||
|
String colName = simulationTable.getColumnName(j);
|
||||||
|
String unitString = valueColumnToUnitString.get(colName); // unit string MAY be null!
|
||||||
|
|
||||||
Object o = simulationTableModel.getValueAt(i, j);
|
Object o = simulationTableModel.getValueAt(i, j);
|
||||||
if (o != null) {
|
if (o != null) {
|
||||||
String value = o.toString();
|
String value = o.toString();
|
||||||
|
if (unitString != null) {
|
||||||
|
value = value.replace(" " + unitString, "");
|
||||||
|
}
|
||||||
rowColumnElement.add(StringEscapeUtils.escapeCsv(value));
|
rowColumnElement.add(StringEscapeUtils.escapeCsv(value));
|
||||||
} else {
|
} else {
|
||||||
rowColumnElement.add("");
|
rowColumnElement.add("");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user