package com.kodcu.config.factory;
import com.dooapp.fxform.model.Element;
import com.dooapp.fxform.reflection.ReflectionUtils;
import com.dooapp.fxform.view.FXFormNode;
import com.dooapp.fxform.view.FXFormNodeWrapper;
import com.kodcu.component.TextFieldTableCell;
import javafx.scene.control.Button;
import javafx.scene.control.SelectionMode;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.util.Callback;
import javafx.util.converter.DefaultStringConverter;
import java.lang.reflect.Field;
import java.util.List;
/**
* Created by usta on 17.07.2015.
*/
public class TableFactory implements Callback<Void, FXFormNode> {
private final TableView tableView;
private final Button addButton = new Button("Add");
private final Button removeButton = new Button("Remove");
public TableFactory(TableView tableView) {
this.tableView = tableView;
}
@Override
public FXFormNode call(Void param) {
tableView.setEditable(true);
tableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
tableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
return new FXFormNodeWrapper(new VBox(3, tableView, new HBox(5, addButton, removeButton)), tableView.itemsProperty()) {
@Override
public void init(Element element) {
Class wrappedType = element.getWrappedType();
List<Field> fields = ReflectionUtils.listFields(wrappedType);
for (Field field : fields) {
TableColumn col = new TableColumn(field.getName());
col.setCellValueFactory(new PropertyValueFactory(field.getName()));
col.setCellFactory(list -> new TextFieldTableCell(new DefaultStringConverter()));
tableView.getColumns().add(col);
}
addButton.setOnAction(event -> {
try {
tableView.getItems().add(element.getWrappedType().newInstance());
tableView.edit(tableView.getItems().size() - 1, (TableColumn) tableView.getColumns().get(0));
} catch (Exception e) {
e.printStackTrace();
}
});
removeButton.setOnAction(event -> {
tableView.getItems().removeAll(tableView.getSelectionModel().getSelectedItems());
});
}
};
}
}