package gettasky.web;
import gettasky.domain.Task;
import gettasky.storage.StorageFactory;
import gettasky.util.Tasks;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Controller servlet.
*/
@WebServlet("/tasks")
public class TaskServlet extends HttpServlet
{
private static final long serialVersionUID = 1L;
private static final String TASK_HELPER_NAME = "taskHelper";
private static final String TASK_PAGE = "/tasks.jsp";
private static final String TASK_SERVLET_ACTION_NAME = "tasks"; // IMPROVE: get from config somehow.
/**
* @see Servlet#init(ServletConfig)
*/
public void init(ServletConfig config) throws ServletException
{
Tasks.populateIfEmpty();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
TaskHelper helper = (TaskHelper) request.getAttribute(TASK_HELPER_NAME);
if (helper == null)
{
helper = new TaskHelper();
}
if (request.getParameter("deleteCompleted") != null)
{
StorageFactory.getTaskStorage().deleteCompletedTasks();
}
// Tasks.
Task[] tasks;
String action = TASK_SERVLET_ACTION_NAME;
String tag = request.getParameter("tag");
if (tag == null || tag.trim().isEmpty())
{
tasks = StorageFactory.getTaskStorage().findAllTasks();
}
else
{
tasks = StorageFactory.getTaskStorage().findTasksWithTag(tag);
action += "?tag=" + tag;
}
helper.setTasks(tasks);
helper.setAction(action);
// Tags.
String[] tags = StorageFactory.getTaskStorage().findAllTags();
helper.setTags(tags);
// Forward on to the JSP.
helper.setForwardedFromServlet(true);
request.setAttribute(TASK_HELPER_NAME, helper);
RequestDispatcher dispatcher = request.getServletContext().getRequestDispatcher(TASK_PAGE);
dispatcher.forward(request,response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
String description = request.getParameter("description");
if (description == null || description.trim().length() == 0)
{
TaskHelper helper = new TaskHelper();
helper.setErrorMessage("You must provide a task description.");
request.setAttribute(TASK_HELPER_NAME, helper);
}
else
{
Task task = new Task(description);
task.setPriority(Task.Priority.valueOf(request.getParameter("priority")));
task.setTagsString(request.getParameter("tags"));
String isCompletedResponse = request.getParameter("isCompleted");
boolean isCompleted = (isCompletedResponse != null) && (isCompletedResponse.equals("yes"));
task.setCompleted(isCompleted);
String id = request.getParameter("id");
if (id != null && id.trim().length() > 0)
{
task.setId(id);
}
StorageFactory.getTaskStorage().save(task);
}
// Do the normal processing and web page display.
doGet(request, response);
}
}