package net.lr.tasklist.ui;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Collection;
import javax.inject.Inject;
import javax.inject.Singleton;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.ops4j.pax.cdi.api.OsgiService;
import org.ops4j.pax.cdi.api.OsgiServiceProvider;
import org.ops4j.pax.cdi.api.Properties;
import org.ops4j.pax.cdi.api.Property;
import net.lr.tasklist.model.Task;
import net.lr.tasklist.model.TaskService;
/**
* The is an issue in Apache Karaf 4.1.0 when both properties below are set. The servlet will then not be registered.
* For this case remove the alias property.
*/
@OsgiServiceProvider(classes = Servlet.class)
@Properties({//
//@Property(name = "alias", value = "/tasklist"), // For pax web < 6 like in Apache Karaf < 4.1
@Property(name = "osgi.http.whiteboard.servlet.pattern", value = "/tasklist") // For felix http
})
@Singleton
public class TaskListServlet extends HttpServlet {
@Inject @OsgiService
TaskService taskService;
private static final long serialVersionUID = 34992072289535683L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/html");
String taskId = req.getParameter("taskId");
PrintWriter writer = resp.getWriter();
if (taskId != null && taskId.length() > 0) {
showTask(writer, taskId);
} else {
showTaskList(writer);
}
}
private void showTaskList(PrintWriter writer) {
writer.println("<h1>Tasks</h1>");
Collection<Task> tasks = taskService.getTasks();
for (Task task : tasks) {
writer.println("<a href=\"?taskId=" + task.getId() + "\">" + task.getTitle() + "</a><BR/>");
}
}
private void showTask(PrintWriter writer, String taskId) {
SimpleDateFormat sdf = new SimpleDateFormat();
Task task = taskService.getTask(taskId);
if (task != null) {
writer.println("<h1>Task " + task.getTitle() + " </h1>");
if (task.getDueDate() != null) {
writer.println("Due date: " + sdf.format(task.getDueDate()) + "<br/>");
}
writer.println(task.getDescription());
} else {
writer.println("Task with id " + taskId + " not found");
}
}
}