@Test public void duplicateRow() { Row row = new Row(5); row.flagged = true; Row duplicateRow = row.dup(); Assert.assertTrue(duplicateRow.flagged); }
@Override public void apply(Project project) { synchronized (project) { if (_firstNewCellIndex < 0) { _firstNewCellIndex = project.columnModel.allocateNewCellIndex(); for (int i = 1; i < _columnNames.size(); i++) { project.columnModel.allocateNewCellIndex(); } _oldRows = new ArrayList<Row>(project.rows); _newRows = new ArrayList<Row>(project.rows.size()); int cellIndex = project.columnModel.getColumnByName(_baseColumnName).getCellIndex(); int keyCellIndex = project.columnModel.columns.get(project.columnModel.getKeyColumnIndex()).getCellIndex(); int index = 0; int rowIndex = index < _rowIndices.size() ? _rowIndices.get(index) : _oldRows.size(); DataExtension dataExtension = index < _rowIndices.size() ? _dataExtensions.get(index) : null; index++; Map<String, Recon> reconMap = new HashMap<String, Recon>(); for (int r = 0; r < _oldRows.size(); r++) { Row oldRow = _oldRows.get(r); if (r < rowIndex) { _newRows.add(oldRow.dup()); continue; } if (dataExtension == null || dataExtension.data.length == 0) { _newRows.add(oldRow); } else { Row firstNewRow = oldRow.dup(); extendRow(firstNewRow, dataExtension, 0, reconMap); _newRows.add(firstNewRow); int r2 = r + 1; for (int subR = 1; subR < dataExtension.data.length; subR++) { if (r2 < project.rows.size()) { Row oldRow2 = project.rows.get(r2); if (oldRow2.isCellBlank(cellIndex) && oldRow2.isCellBlank(keyCellIndex)) { Row newRow = oldRow2.dup(); extendRow(newRow, dataExtension, subR, reconMap); _newRows.add(newRow); r2++; continue; } } Row newRow = new Row(cellIndex + _columnNames.size()); extendRow(newRow, dataExtension, subR, reconMap); _newRows.add(newRow); } r = r2 - 1; // r will be incremented by the for loop anyway } rowIndex = index < _rowIndices.size() ? _rowIndices.get(index) : _oldRows.size(); dataExtension = index < _rowIndices.size() ? _dataExtensions.get(index) : null; index++; } } project.rows.clear(); project.rows.addAll(_newRows); for (int i = 0; i < _columnNames.size(); i++) { String name = _columnNames.get(i); int cellIndex = _firstNewCellIndex + i; Column column = new Column(cellIndex, name); column.setReconConfig(new DBpediaDataExtensionReconConfig(_columnTypes.get(i))); column.setReconStats(ReconStats.create(project, cellIndex)); try { project.columnModel.addColumn(_columnInsertIndex + i, column, true); // the column might have been renamed to avoid collision _columnNames.set(i, column.getName()); } catch (ModelException e) { // won't get here since we set the avoid collision flag } } project.update(); } }