Fixed some NPE issues in new projects and also finished wiring up spreadsheet UX to be on-parity with previous spreadsheet UX.

This commit is contained in:
Brendan Robert 2018-09-15 22:13:52 -05:00
parent 8fd55f6230
commit 07c57e5c1d
2 changed files with 59 additions and 61 deletions

View File

@ -96,7 +96,7 @@ public class DataUtilities {
} }
private static void logScripts(Scripts scripts, PrintWriter logger) { private static void logScripts(Scripts scripts, PrintWriter logger) {
if (scripts != null && scripts.getScript() != null || !scripts.getScript().isEmpty()) { if (scripts != null && scripts.getScript() != null && !scripts.getScript().isEmpty()) {
scripts.getScript().forEach((script) -> { scripts.getScript().forEach((script) -> {
if (script.getBlock() == null) { if (script.getBlock() == null) {
return; return;

View File

@ -63,23 +63,15 @@ public class SheetEditorControllerImpl extends SheetEditorController {
super.initialize(); super.initialize();
tableData = table.getGrid().getRows(); tableData = table.getGrid().getRows();
table.setEditable(true); table.setEditable(true);
/* table.getContextMenu().getItems().addAll(
table.setRowFactory(tableView -> { createMenuItem("Insert Row", () -> insertRow(new Row(), getSelectedRow())),
final TableRow<Row> row = new TableRow<>(); createMenuItem("Clone Row", () -> cloneRow(editor.getSheet().getRows().getRow().get(getSelectedRow()))),
createMenuItem("Delete Row", () -> deleteRowWithConfirmation(editor.getSheet().getRows().getRow().get(getSelectedRow())))
final ContextMenu contextMenu = new ContextMenu( );
createMenuItem("Insert Row", () -> tableData.add(row.getIndex(), new Row())), }
createMenuItem("Clone Row", () -> cloneRow(row.getItem())),
createMenuItem("Delete Row", () -> deleteRowWithConfirmation(row.getItem())) private int getSelectedRow() {
); return table.getSelectionModel().getFocusedCell().getRow();
row.contextMenuProperty().bind(
Bindings.when(row.emptyProperty())
.then((ContextMenu) null)
.otherwise(contextMenu)
);
return row;
});
*/
} }
@Override @Override
@ -132,14 +124,14 @@ public class SheetEditorControllerImpl extends SheetEditorController {
if (editor.getSheet().getColumns() == null) { if (editor.getSheet().getColumns() == null) {
editor.getSheet().setColumns(new Columns()); editor.getSheet().setColumns(new Columns());
} }
insertViewColumn(col); insertColumn(col);
rebuildGridUI(); rebuildGridUI();
} }
} }
@Override @Override
public void addRowAction(ActionEvent event) { public void addRowAction(ActionEvent event) {
insertViewRow(new Row()); insertRow(new Row(), -1);
} }
//-------- //--------
@ -154,11 +146,11 @@ public class SheetEditorControllerImpl extends SheetEditorController {
}); });
} }
private void insertViewColumn(UserType col) { private void insertColumn(UserType col) {
insertViewColumn(col, -1); insertColumn(col, -1);
} }
private void insertViewColumn(UserType col, int pos) { private void insertColumn(UserType col, int pos) {
table.getGrid().getColumnHeaders().clear(); table.getGrid().getColumnHeaders().clear();
if (pos < 0 || pos >= editor.getSheet().getColumns().getColumn().size()) { if (pos < 0 || pos >= editor.getSheet().getColumns().getColumn().size()) {
editor.getSheet().getColumns().getColumn().add(col); editor.getSheet().getColumns().getColumn().add(col);
@ -168,8 +160,15 @@ public class SheetEditorControllerImpl extends SheetEditorController {
rebuildColumnHeaders(); rebuildColumnHeaders();
} }
private void insertViewRow(Row row) { private void insertRow(Row row, int pos) {
editor.getSheet().getRows().getRow().add(new Row()); if (editor.getSheet().getRows() == null) {
editor.getSheet().setRows(new Rows());
}
if (pos < 0 || pos >= editor.getSheet().getRows().getRow().size()) {
editor.getSheet().getRows().getRow().add(row);
} else {
editor.getSheet().getRows().getRow().add(pos, row);
}
rebuildGridUI(); rebuildGridUI();
} }
@ -191,25 +190,22 @@ public class SheetEditorControllerImpl extends SheetEditorController {
UserType newCol = new UserType(); UserType newCol = new UserType();
newCol.setName(newColName); newCol.setName(newColName);
editor.getSheet().getColumns().getColumn().add(newCol); editor.getSheet().getColumns().getColumn().add(newCol);
// tableData.forEach(row -> setValue(row.getOtherAttributes(), newColName, getValue(row.getOtherAttributes(), col.getName()))); editor.getSheet().getRows().getRow()
int oldPos = deleteColumn(col); .forEach(row -> {
insertViewColumn(newCol, oldPos); setValue(row.getOtherAttributes(), newColName, getValue(row.getOtherAttributes(), col.getName()));
});
deleteColumn(col);
} }
} }
private int deleteColumn(UserType col) { private void deleteColumn(UserType col) {
// editor.getSheet().getColumns().getColumn().remove(col); editor.getSheet().getColumns().getColumn().remove(col);
// tableData.stream() editor.getSheet().getRows().getRow().stream()
// .map(Row::getOtherAttributes) .map(Row::getOtherAttributes)
// .forEach( .forEach(
// m -> m.keySet().removeIf(n -> n.getLocalPart().equals(col.getName())) m -> m.keySet().removeIf(n -> n.getLocalPart().equals(col.getName()))
// ); );
// int colNumber = findColumn(col); rebuildGridUI();
// if (colNumber >= 0) {
// table.getColumns().remove(colNumber);
// }
// return colNumber;
return 0;
} }
private void deleteRowWithConfirmation(Row row) { private void deleteRowWithConfirmation(Row row) {
@ -222,9 +218,9 @@ public class SheetEditorControllerImpl extends SheetEditorController {
private void cloneRow(Row row) { private void cloneRow(Row row) {
try { try {
Row newRow = TransferHelper.cloneObject(row, Row.class, "row"); Row newRow = TransferHelper.cloneObject(row, Row.class, "row");
editor.getSheet().getRows().getRow().add(newRow); int pos = editor.getSheet().getRows().getRow().indexOf(row);
rebuildGridUI(); insertRow(newRow, pos);
} catch (JAXBException ex) { } catch (JAXBException ex) {
Logger.getLogger(SheetEditorControllerImpl.class.getName()).log(Level.SEVERE, null, ex); Logger.getLogger(SheetEditorControllerImpl.class.getName()).log(Level.SEVERE, null, ex);
} }
@ -232,28 +228,30 @@ public class SheetEditorControllerImpl extends SheetEditorController {
private void rebuildGridUI() { private void rebuildGridUI() {
int numCols = editor.getSheet().getColumns().getColumn().size(); int numCols = editor.getSheet().getColumns().getColumn().size();
int numRows = editor.getSheet().getRows().getRow().size(); int numRows = editor.getSheet().getRows() == null ? 0 : editor.getSheet().getRows().getRow().size();
table.setGrid(new GridBase(numRows, numCols)); table.setGrid(new GridBase(numRows, numCols));
rebuildColumnHeaders(); rebuildColumnHeaders();
tableData = FXCollections.observableList(new ArrayList(numRows)); tableData = FXCollections.observableList(new ArrayList(numRows));
int rowNum = 0; if (editor.getSheet().getRows() != null) {
for (Row row : editor.getSheet().getRows().getRow()) { int rowNum = 0;
int colNum = 0; for (Row row : editor.getSheet().getRows().getRow()) {
ObservableList<SpreadsheetCell> rowUi = FXCollections.observableList(new ArrayList<>(numCols)); int colNum = 0;
tableData.add(rowUi); ObservableList<SpreadsheetCell> rowUi = FXCollections.observableList(new ArrayList<>(numCols));
for (UserType col : editor.getSheet().getColumns().getColumn()) { tableData.add(rowUi);
String value = getValue(row.getOtherAttributes(), col.getName()); for (UserType col : editor.getSheet().getColumns().getColumn()) {
SpreadsheetCellBase cell = new SpreadsheetCellBase(rowNum, colNum, 1, 1); String value = getValue(row.getOtherAttributes(), col.getName());
cell.setItem(value); SpreadsheetCellBase cell = new SpreadsheetCellBase(rowNum, colNum, 1, 1);
cell.itemProperty().addListener((ObservableValue<? extends Object> val, Object oldVal, Object newVal) -> { cell.setItem(value);
setValue(row.getOtherAttributes(), col.getName(), String.valueOf(newVal)); cell.itemProperty().addListener((ObservableValue<? extends Object> val, Object oldVal, Object newVal) -> {
}); setValue(row.getOtherAttributes(), col.getName(), String.valueOf(newVal));
rowUi.add(cell); });
colNum++; rowUi.add(cell);
colNum++;
}
rowNum++;
} }
rowNum++;
} }
table.getGrid().setRows(tableData); table.getGrid().setRows(tableData);
} }
@ -264,7 +262,7 @@ public class SheetEditorControllerImpl extends SheetEditorController {
editor.getSheet().getColumns().getColumn().stream() editor.getSheet().getColumns().getColumn().stream()
.map(UserType::getName) .map(UserType::getName)
.collect(Collectors.toCollection( .collect(Collectors.toCollection(
() -> FXCollections.observableList(new ArrayList<String>(numCols)) () -> FXCollections.observableList(new ArrayList<>(numCols))
)) ))
); );
} }