package com.hantsylabs.example.spring.web;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.web.jsf.FacesContextUtils;
import com.hantsylabs.example.spring.jpa.TaskRepository;
import com.hantsylabs.example.spring.model.Status;
import com.hantsylabs.example.spring.model.Task;
/**
*
* @author hantsy
*
*/
@Named("taskHome")
@Scope(value = "view")
public class TaskHome {
private static final Logger log = LoggerFactory.getLogger(TaskHome.class);
@Inject
private TaskRepository taskRepository;
private List<TaskDetails> todotasks = new ArrayList<>();
private List<TaskDetails> doingtasks = new ArrayList<>();
private List<TaskDetails> donetasks = new ArrayList<>();
public List<TaskDetails> getTodotasks() {
return todotasks;
}
public List<TaskDetails> getDoingtasks() {
return doingtasks;
}
public List<TaskDetails> getDonetasks() {
return donetasks;
}
public void init() {
log.debug("initalizing...");
if (!FacesContext.getCurrentInstance().isPostback()) {
retrieveAllTasks();
}
}
private void retrieveAllTasks() {
log.debug("retriveing all tasks...");
this.todotasks = findTasksByStatus(Status.TODO);
this.doingtasks = findTasksByStatus(Status.DOING);
this.donetasks = findTasksByStatus(Status.DONE);
}
private List<TaskDetails> findTasksByStatus(Status status) {
List<TaskDetails> taskList = new ArrayList<TaskDetails>();
List<Task> tasks = taskRepository.findByStatus(status, new Sort(Direction.DESC, "lastModifiedDate"));
for (Task task : tasks) {
TaskDetails details = new TaskDetails();
details.setId(task.getId());
details.setName(task.getName());
details.setDescription(task.getDescription());
details.setCreatedDate(task.getCreatedDate());
details.setLastModifiedDate(task.getLastModifiedDate());
taskList.add(details);
}
return taskList;
}
public void deleteTask(Long id) {
log.debug("delete task of id@" + id);
Task task = taskRepository.findOne(id);
if (task == null) {
throw new TaskNotFoundException(id);
}
taskRepository.delete(id);
// retrieve all tasks
retrieveAllTasks();
FacesMessage deleteInfo= new FacesMessage(FacesMessage.SEVERITY_WARN, "Task is deleted!", "Task is deleted!");
FacesContext.getCurrentInstance().addMessage(null, deleteInfo);
}
public void markTaskDoing(Long id) {
log.debug("changing task DONG @" + id);
Task task = taskRepository.findOne(id);
if (task == null) {
throw new TaskNotFoundException(id);
}
task.setStatus(Status.DOING);
taskRepository.save(task);
// retrieve all tasks
retrieveAllTasks();
}
public void markTaskDone(Long id) {
log.debug("changing task DONE @" + id);
Task task = taskRepository.findOne(id);
if (task == null) {
throw new TaskNotFoundException(id);
}
task.setStatus(Status.DONE);
taskRepository.save(task);
// retrieve all tasks
retrieveAllTasks();
}
}