Created
September 23, 2012 11:37
-
-
Save msulima/3769870 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package pl.baza.gui.controllers.tasks; | |
import javafx.beans.value.ChangeListener; | |
import javafx.beans.value.ObservableValue; | |
import javafx.fxml.FXML; | |
import javafx.fxml.Initializable; | |
import javafx.scene.layout.AnchorPane; | |
import org.joda.time.DateTime; | |
import org.joda.time.Days; | |
import org.springframework.beans.factory.InitializingBean; | |
import org.springframework.beans.factory.annotation.Autowired; | |
import org.springframework.context.annotation.Lazy; | |
import org.springframework.stereotype.Component; | |
import org.springframework.validation.Errors; | |
import pl.baza.domain.entities.Task; | |
import pl.baza.domain.entities.TaskType; | |
import pl.baza.domain.entities.User; | |
import pl.baza.gui.controllers.FXMLController; | |
import pl.baza.gui.controls.dialogs.FormErrorsDialog; | |
import pl.baza.gui.loaders.ModuleLoader; | |
import pl.baza.services.task.TaskService; | |
import pl.baza.settings.ApplicationSettings; | |
import java.net.URL; | |
import java.util.HashSet; | |
import java.util.ResourceBundle; | |
@Component | |
@Lazy | |
public class TasksController extends AnchorPane implements Initializable, FXMLController, InitializingBean { | |
@Autowired | |
private ModuleLoader moduleLoader; | |
@Autowired | |
private TaskService taskService; | |
@Autowired | |
private FormErrorsDialog formErrorsDialog; | |
@Autowired | |
private TaskForm taskForm; | |
@Autowired | |
private TaskDetails taskDetails; | |
@Autowired | |
private TasksList tasksList; | |
@FXML | |
private AnchorPane tasksListPane; | |
@FXML | |
private AnchorPane taskFormPane; | |
@Override | |
public void initialize(URL fxmlFileLocation, ResourceBundle resources) { | |
initializeTasksList(); | |
initializeTaskForm(); | |
initializeTaskDetails(); | |
} | |
private void initializeTaskForm() { | |
taskForm.initializeAll(); | |
setTaskFormToCreate(); | |
switchToTaskForm(); | |
} | |
private void initializeTasksList() { | |
tasksList.initializeAll(); | |
tasksList.addSelectionClearedListener(createSelectionClearedListener()); | |
tasksList.addSelectTaskListener(createSelectTaskListener()); | |
tasksList.refreshAll(); | |
tasksListPane.getChildren().add(tasksList); | |
} | |
private void initializeTaskDetails() { | |
taskDetails.initializeAll(); | |
} | |
public void refresh() { | |
tasksList.refreshAll(); | |
} | |
private ChangeListener<Task> createSelectionClearedListener() { | |
return new ChangeListener<Task>() { | |
@Override | |
public void changed(ObservableValue<? extends Task> ov, Task oldTask, Task selectedItem) { | |
setTaskFormToCreate(); | |
} | |
}; | |
} | |
public void showCreateNewTaskForm() { | |
tasksList.clearSelection(); | |
} | |
private ChangeListener<Task> createSelectTaskListener() { | |
return new ChangeListener<Task>() { | |
@Override | |
public void changed(ObservableValue<? extends Task> ov, Task oldTask, Task selectedItem) { | |
if (userCanUpdateTask(selectedItem, ApplicationSettings.getLoggedUser())) { | |
setTaskFormToUpdate(selectedItem); | |
} else { | |
setTaskDetailsToShow(selectedItem); | |
} | |
} | |
}; | |
} | |
private boolean userCanUpdateTask(Task task, User user) { | |
return (isTaskNotFinished(task) && isUserTaskAuthor(task, user)) || user.isAdmin(); | |
} | |
private boolean isUserTaskAuthor(Task task, User user) { | |
return task.getAuthor().equals(user); | |
} | |
private boolean isTaskNotFinished(Task task) { | |
return task.getFinishDate() != null; | |
} | |
private void setTaskFormToCreate() { | |
switchToTaskForm(); | |
taskForm.setEditedTask(createDefaultTask()); | |
taskForm.setSaveListener(createTaskListener()); | |
taskForm.setDeleteListener(null); | |
taskForm.setCloseListener(null); | |
} | |
private Task createDefaultTask() { | |
Task task = new Task(); | |
task.setAuthor(ApplicationSettings.getLoggedUser()); | |
task.setAddDate(DateTime.now()); | |
task.setDueDate(DateTime.now().plus(Days.ONE)); | |
task.setContent(""); | |
task.setTaskType(TaskType.PUBLIC); | |
return task; | |
} | |
private void setTaskFormToUpdate(Task task) { | |
switchToTaskForm(); | |
taskForm.setEditedTask(task); | |
taskForm.setSaveListener(updateTaskListener()); | |
taskForm.setCloseListener(closeTaskListener()); | |
taskForm.setDeleteListener(deleteTaskListener()); | |
} | |
private void switchToTaskForm() { | |
taskFormPane.getChildren().clear(); | |
taskFormPane.getChildren().add(taskForm); | |
} | |
private void setTaskDetailsToShow(Task task) { | |
switchToTaskDetails(); | |
taskDetails.setShownTask(task); | |
} | |
private void switchToTaskDetails() { | |
taskFormPane.getChildren().clear(); | |
taskFormPane.getChildren().add(taskDetails); | |
} | |
public TaskForm.TaskFormListener createTaskListener() { | |
return new TaskForm.TaskFormListener() { | |
@Override | |
public void changed() { | |
Task task = new Task(); | |
updateTaskWithFormFields(task); | |
task.setAuthor(ApplicationSettings.getLoggedUser()); | |
Errors errors = taskService.validate(task); | |
if (errors.hasErrors()) { | |
formErrorsDialog.show(errors); | |
} else { | |
taskService.saveTask(task); | |
tasksList.appendTaskAndSelect(task); | |
} | |
} | |
}; | |
} | |
public TaskForm.TaskFormListener updateTaskListener() { | |
return new TaskForm.TaskFormListener() { | |
@Override | |
public void changed() { | |
Task task = tasksList.getSelectedTask(); | |
if (task.getFinishDate() == null) { | |
updateTaskWithFormFields(task); | |
Errors errors = taskService.validate(task); | |
if (errors.hasErrors()) { | |
formErrorsDialog.show(errors); | |
} else { | |
taskService.updateTask(task); | |
tasksList.refreshAll(); | |
} | |
} | |
} | |
}; | |
} | |
private void updateTaskWithFormFields(Task task) { | |
task.setAddDate(taskForm.getAddDate()); | |
task.setDueDate(taskForm.getDueDate()); | |
task.setContent(taskForm.getContent()); | |
task.setFinishDate(null); | |
task.setTaskType(taskForm.getVisibility()); | |
if (taskForm.getVisibility() == TaskType.SHARED) { | |
task.setVisibleFor(taskForm.getSharedUsers()); | |
} | |
} | |
public TaskForm.TaskFormListener deleteTaskListener() { | |
return new TaskForm.TaskFormListener() { | |
@Override | |
public void changed() { | |
Task task = tasksList.getSelectedTask(); | |
task.setVisibleFor(new HashSet<User>()); | |
taskService.deleteTask(task); | |
tasksList.removeTask(task); | |
if (tasksList.hasSelectedTask()) { | |
setTaskFormToCreate(); | |
} else { | |
setTaskFormToUpdate(tasksList.getSelectedTask()); | |
} | |
} | |
}; | |
} | |
private TaskForm.TaskFormListener closeTaskListener() { | |
return new TaskForm.TaskFormListener() { | |
@Override | |
public void changed() { | |
Task task = tasksList.getSelectedTask(); | |
task.setFinishDate(DateTime.now()); | |
taskService.updateTask(task); | |
tasksList.refreshAll(); | |
} | |
}; | |
} | |
@Override | |
public void afterPropertiesSet() { | |
moduleLoader.loadModule(this); | |
} | |
@Override | |
public String getBackingFilePath() { | |
return "/gui/modules/tasks/TasksModule.fxml"; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment