package ru.khasang.cachoeira.view.mainwindow.diagram.ganttplan.objectslayer;
import javafx.beans.InvalidationListener;
import javafx.beans.WeakInvalidationListener;
import javafx.scene.layout.Pane;
import ru.khasang.cachoeira.model.IResource;
import ru.khasang.cachoeira.model.ITask;
import ru.khasang.cachoeira.viewcontroller.MainWindowController;
import ru.khasang.cachoeira.view.mainwindow.diagram.ganttplan.objectslayer.taskbar.TaskBar;
public abstract class ObjectsLayer extends Pane {
protected MainWindowController controller;
@SuppressWarnings("FieldCanBeLocal")
private InvalidationListener zoomMultiplierListener;
/**
* Метод для добавления отдельно взятой метки на диаграмму.
*
* @param task Задача которая присваивается к метке.
*/
public void addTaskBar(ITask task, IResource resource) {
TaskBar taskBar = createTaskBar(task, resource);
this.getChildren().add(taskBar);
}
/**
* Метод для удаления отдельно взятой метки с диаграммы.
*
* @param task Задача которая присвоена к метке.
*/
public void removeTaskBar(ITask task) {
this.getChildren().removeIf(node -> {
TaskBar taskBar = (TaskBar) node;
return taskBar.getTask().equals(task);
});
}
/**
* Данный метод вызывается в случае удаления какого либо ресурса из таблицы.
*
* @param task Задача которая присваивается к метке.
* @param resource Ресурс который присваивается к метке.
*/
public void removeTaskBarByResource(ITask task,
IResource resource) {
this.getChildren().removeIf(node -> {
TaskBar taskBar = (TaskBar) node;
return taskBar.getTask().equals(task) && taskBar.getResource().equals(resource);
});
}
/**
* Метод для поиска нужной метки по задаче.
*
* @param task Задача которая присвоена метке.
* @return Возвращает метку.
*/
public TaskBar findTaskBarByTask(ITask task) {
return (TaskBar) this.getChildren().stream()
.filter(node -> {
TaskBar taskBar = (TaskBar) node;
return taskBar.getTask().equals(task);
})
.findFirst()
.orElse(null);
}
/**
* Метод для создания метки.
*
* @param task Задача которая присваивается к метке.
* @return Возвращает taskBar.
*/
public abstract TaskBar createTaskBar(ITask task, IResource resource);
/**
* Метод для обновления всей диаграммы.
*/
public abstract void refreshPlan();
/**
* Если переменная зума меняется то обновляем диаграмму
*/
public void setListeners() {
zoomMultiplierListener = observable -> refreshPlan();
controller.zoomMultiplierProperty().addListener(new WeakInvalidationListener(zoomMultiplierListener));
}
}