package ru.khasang.cachoeira.viewcontroller.mainwindowcontrollers.propertiesmodules.objects; import javafx.scene.control.CheckBox; import ru.khasang.cachoeira.commands.task.AddResourceToTaskCommand; import ru.khasang.cachoeira.commands.task.RemoveResourceFromTaskCommand; import ru.khasang.cachoeira.model.IResource; import ru.khasang.cachoeira.viewcontroller.MainWindowController; public class ResourceCheckBoxCell extends AbstractCheckBoxCell<IResource, Boolean> { private MainWindowController controller; public ResourceCheckBoxCell(MainWindowController controller) { this.controller = controller; } @Override protected CheckBox createCheckBox() { CheckBox checkBox = new CheckBox(); checkBox.setOnAction(event -> handleSelection(checkBox)); return checkBox; } @Override protected void setSelectedCheckBox(CheckBox checkBox) { if (currentRow != null) { controller.getSelectedTask().getResourceList() .stream() .filter(resource -> resource.equals(currentRow) && !checkBox.isSelected()) .forEach(resource -> checkBox.setSelected(true)); } } private void handleSelection(CheckBox checkBox) { if (checkBox.isSelected()) { controller.getCommandExecutor().execute( new AddResourceToTaskCommand(controller.getSelectedTask(), currentRow)); } else { controller.getCommandExecutor().execute( new RemoveResourceFromTaskCommand(controller.getSelectedTask(), currentRow)); } } }