Merge pull request #1146 from jackyq2015/bugfix/transpose

fix #1138. column transpose
This commit is contained in:
Jacky 2016-11-06 13:17:56 -05:00 committed by GitHub
commit b14dd56b80
3 changed files with 25 additions and 32 deletions

View File

@ -81,14 +81,6 @@ public class ColumnModel implements Jsonizable {
return ++_maxCellIndex; return ++_maxCellIndex;
} }
synchronized public void removeCellIndex(int index) {
if (index > _maxCellIndex - 1)
return;
columns.remove(index);
_maxCellIndex--;
}
synchronized public void setKeyColumnIndex(int keyColumnIndex) { synchronized public void setKeyColumnIndex(int keyColumnIndex) {
// TODO: check validity of new cell index, e.g., it's not in any group // TODO: check validity of new cell index, e.g., it's not in any group
this._keyColumnIndex = keyColumnIndex; this._keyColumnIndex = keyColumnIndex;

View File

@ -251,16 +251,10 @@ public class KeyValueColumnizeOperation extends AbstractOperation {
allColumns.addAll(newColumns); allColumns.addAll(newColumns);
allColumns.addAll(newNoteColumns); allColumns.addAll(newNoteColumns);
// clean up the reused column model and row model // clean up the empty rows
int smallIndex = Math.min(keyColumnIndex, valueColumnIndex); for (int i = newRows.size() - 1;i>=0;i--) {
int bigIndex = Math.max(keyColumnIndex, valueColumnIndex); if (newRows.get(i).isEmpty())
newRows.remove(i);
project.columnModel.removeCellIndex(bigIndex);
project.columnModel.removeCellIndex(smallIndex);
for (Row row : newRows) {
row.cells.remove(bigIndex);
row.cells.remove(smallIndex);
} }
return new HistoryEntry( return new HistoryEntry(

View File

@ -126,13 +126,11 @@ public class TransposeTests extends RefineTest {
HistoryEntry historyEntry = process.performImmediate(); HistoryEntry historyEntry = process.performImmediate();
// Expected output // Expected output from the GUI.
// ID;a;b;c;d
// ID;a;b;c;d // 1;1;3;;
// 1;1;3;; // 2;;4;5;
// 2;;4;5; // 3;2;5;;3
// 3;2;5;;3
Assert.assertEquals(project.columnModel.columns.size(), 5); Assert.assertEquals(project.columnModel.columns.size(), 5);
Assert.assertEquals(project.columnModel.columns.get(0).getName(), "ID"); Assert.assertEquals(project.columnModel.columns.get(0).getName(), "ID");
Assert.assertEquals(project.columnModel.columns.get(1).getName(), "a"); Assert.assertEquals(project.columnModel.columns.get(1).getName(), "a");
@ -141,14 +139,23 @@ public class TransposeTests extends RefineTest {
Assert.assertEquals(project.columnModel.columns.get(4).getName(), "d"); Assert.assertEquals(project.columnModel.columns.get(4).getName(), "d");
Assert.assertEquals(project.rows.size(), 3); Assert.assertEquals(project.rows.size(), 3);
// the last 2 cells are not added as expected, the size is 5-2 // The actual row data structure has to leave the columns model untouched for redo/undo purpose.
Assert.assertEquals(project.rows.get(0).cells.size(), 5 - 2); // So we have 2 empty columns(column 1,2) on the row level.
Assert.assertEquals(project.rows.get(1).cells.size(), 5 - 1); // 1;1;3;;
Assert.assertEquals(project.rows.get(2).cells.size(), 5);
Assert.assertEquals(project.rows.get(0).cells.get(0).value, "1"); Assert.assertEquals(project.rows.get(0).cells.get(0).value, "1");
Assert.assertEquals(project.rows.get(0).cells.get(1).value, "1"); Assert.assertEquals(project.rows.get(0).cells.get(3).value, "1");
Assert.assertEquals(project.rows.get(0).cells.get(2).value, "3"); Assert.assertEquals(project.rows.get(0).cells.get(4).value, "3");
// 2;;4;5;
Assert.assertEquals(project.rows.get(1).cells.get(0).value, "2");
Assert.assertEquals(project.rows.get(1).cells.get(4).value, "4");
Assert.assertEquals(project.rows.get(1).cells.get(5).value, "5");
// 3;2;5;;3
Assert.assertEquals(project.rows.get(2).cells.get(0).value, "3");
Assert.assertEquals(project.rows.get(2).cells.get(3).value, "2");
Assert.assertEquals(project.rows.get(2).cells.get(4).value, "5");
Assert.assertEquals(project.rows.get(2).cells.get(6).value, "3");
} }