diff --git a/pom.xml b/pom.xml
index 01d16df..e18a365 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,12 +24,22 @@
org.springframework
spring-web
- 3.2.1.RELEASE
+ 3.2.2.RELEASE
org.springframework
spring-webmvc
- 3.2.1.RELEASE
+ 3.2.2.RELEASE
+
+
+ org.springframework
+ spring-jdbc
+ 3.2.2.RELEASE
+
+
+ com.h2database
+ h2
+ 1.3.171
\ No newline at end of file
diff --git a/src/main/java/ie/cit/cad/Todo.java b/src/main/java/ie/cit/cad/Todo.java
index c0d8416..98b7e6b 100644
--- a/src/main/java/ie/cit/cad/Todo.java
+++ b/src/main/java/ie/cit/cad/Todo.java
@@ -1,9 +1,16 @@
package ie.cit.cad;
+import java.util.UUID;
+
public class Todo {
+ private String id;
private String text;
private boolean done;
+ public Todo() {
+ id = UUID.randomUUID().toString();
+ }
+
public String getText() {
return text;
}
@@ -20,4 +27,12 @@ public void setText(String text) {
this.text = text;
}
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
}
diff --git a/src/main/java/ie/cit/cad/TodoRepository.java b/src/main/java/ie/cit/cad/TodoRepository.java
deleted file mode 100644
index 880819a..0000000
--- a/src/main/java/ie/cit/cad/TodoRepository.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package ie.cit.cad;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class TodoRepository {
-
- private List todos = new ArrayList();
-
- public TodoRepository() {
- Todo todo1 = new Todo();
- todo1.setText("Remember the Milk!");
- todos.add(todo1);
- }
-
- public void addTodo(Todo todo) {
- todos.add(todo);
- }
-
- public List getTodos() {
- return todos;
- }
-}
diff --git a/src/main/java/ie/cit/cad/TodoServlet.java b/src/main/java/ie/cit/cad/TodoServlet.java
deleted file mode 100644
index d9577c7..0000000
--- a/src/main/java/ie/cit/cad/TodoServlet.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package ie.cit.cad;
-
-import java.io.IOException;
-import java.util.List;
-
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpServletResponseWrapper;
-
-import org.springframework.web.context.WebApplicationContext;
-import org.springframework.web.context.support.WebApplicationContextUtils;
-
-public class TodoServlet extends HttpServlet {
-
- @Override
- public void init(ServletConfig config) throws ServletException {
- super.init(config);
-
- }
-
- private TodoRepository getRepo() {
- WebApplicationContext ctx = WebApplicationContextUtils
- .getWebApplicationContext(getServletContext());
- return (TodoRepository) ctx.getBean("todoRepository");
- }
-
- @Override
- protected void doDelete(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
- String strId = req.getParameter("todoId");
- int todoId = Integer.parseInt(strId);
- getRepo().getTodos().remove(todoId - 1);
- forward(req, resp);
- }
-
- @Override
- protected void doPut(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
- String strId = req.getParameter("todoId");
- int todoId = Integer.parseInt(strId);
- Todo todo = getRepo().getTodos().get(todoId - 1);
- todo.setDone(!todo.isDone());
- forward(req, resp);
- }
-
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
- String text = req.getParameter("text");
- Todo todo = new Todo();
- todo.setText(text);
- getRepo().getTodos().add(todo);
- forward(req, resp);
- }
-
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
- forward(req, resp);
- }
-
- private void forward(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
- List todos = getRepo().getTodos();
- req.setAttribute("todos", todos);
- RequestDispatcher dispatcher = getServletContext()
- .getRequestDispatcher("/todos.jsp");
- dispatcher.forward(req, resp);
- }
-
-}
diff --git a/src/main/java/ie/cit/cad/data/dao/JdbcTodoRepository.java b/src/main/java/ie/cit/cad/data/dao/JdbcTodoRepository.java
new file mode 100644
index 0000000..90bd9d6
--- /dev/null
+++ b/src/main/java/ie/cit/cad/data/dao/JdbcTodoRepository.java
@@ -0,0 +1,53 @@
+package ie.cit.cad.data.dao;
+
+import ie.cit.cad.Todo;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+import javax.sql.DataSource;
+
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.RowMapper;
+
+public class JdbcTodoRepository implements TodoRepository {
+
+ private JdbcTemplate jdbcTemplate;
+
+ public JdbcTodoRepository(DataSource dataSource) {
+ jdbcTemplate = new JdbcTemplate(dataSource);
+ }
+
+ public List getAll() {
+ return jdbcTemplate.query("SELECT * FROM TODO", new TodoRowMapper());
+ }
+
+ public Todo findById(String id) {
+ return null;
+ }
+
+ public void add(Todo todo) {
+
+ }
+
+ public void delete(String id) {
+
+ }
+
+ public void update(Todo todo) {
+
+ }
+}
+
+class TodoRowMapper implements RowMapper {
+
+ public Todo mapRow(ResultSet rs, int rowNum) throws SQLException {
+ Todo todo = new Todo();
+ todo.setId(rs.getString("ID"));
+ todo.setText(rs.getString("TEXT"));
+ todo.setDone(rs.getBoolean("DONE"));
+ return todo;
+ }
+
+}
diff --git a/src/main/java/ie/cit/cad/data/dao/TodoRepository.java b/src/main/java/ie/cit/cad/data/dao/TodoRepository.java
new file mode 100644
index 0000000..b3c65c8
--- /dev/null
+++ b/src/main/java/ie/cit/cad/data/dao/TodoRepository.java
@@ -0,0 +1,18 @@
+package ie.cit.cad.data.dao;
+
+import ie.cit.cad.Todo;
+
+import java.util.List;
+
+public interface TodoRepository {
+ List getAll();
+
+ Todo findById(String id);
+
+ void add(Todo todo);
+
+ void delete(String id);
+
+ void update(Todo todo);
+
+}
diff --git a/src/main/java/ie/cit/cad/web/TodoController.java b/src/main/java/ie/cit/cad/web/TodoController.java
index a4545d7..8b3bb55 100644
--- a/src/main/java/ie/cit/cad/web/TodoController.java
+++ b/src/main/java/ie/cit/cad/web/TodoController.java
@@ -1,7 +1,7 @@
package ie.cit.cad.web;
import ie.cit.cad.Todo;
-import ie.cit.cad.TodoRepository;
+import ie.cit.cad.data.dao.TodoRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@@ -18,7 +18,7 @@ public class TodoController {
@RequestMapping(method = RequestMethod.GET)
public String todoList(Model model) {
- model.addAttribute("todos", repo.getTodos());
+ model.addAttribute("todos", repo.getAll());
return "todos";
}
@@ -26,23 +26,24 @@ public String todoList(Model model) {
public String create(@RequestParam String text, Model model) {
Todo todo = new Todo();
todo.setText(text);
- repo.getTodos().add(todo);
- model.addAttribute("todos", repo.getTodos());
+ repo.add(todo);
+ model.addAttribute("todos", repo.getAll());
return "todos";
}
@RequestMapping(method = RequestMethod.PUT)
- public String update(@RequestParam("todoId") int id, Model model) {
- Todo todo = repo.getTodos().get(id - 1);
+ public String update(@RequestParam("todoId") String id, Model model) {
+ Todo todo = repo.findById(id);
todo.setDone(!todo.isDone());
- model.addAttribute("todos", repo.getTodos());
+ repo.update(todo);
+ model.addAttribute("todos", repo.getAll());
return "todos";
}
@RequestMapping(method = RequestMethod.DELETE)
- public String delete(@RequestParam("todoId") int id, Model model) {
- repo.getTodos().remove(id - 1);
- model.addAttribute("todos", repo.getTodos());
+ public String delete(@RequestParam("todoId") String id, Model model) {
+ repo.delete(id);
+ model.addAttribute("todos", repo.getAll());
return "todo";
}
}
\ No newline at end of file
diff --git a/src/main/resources/db-schema.sql b/src/main/resources/db-schema.sql
new file mode 100644
index 0000000..c0ee0fe
--- /dev/null
+++ b/src/main/resources/db-schema.sql
@@ -0,0 +1 @@
+CREATE TABLE TODO(ID VARCHAR, TEXT VARCHAR, DONE BOOLEAN, PRIMARY KEY(ID))
\ No newline at end of file
diff --git a/src/main/resources/log4j.properties b/src/main/resources/log4j.properties
index 92fe0a1..cec5e04 100644
--- a/src/main/resources/log4j.properties
+++ b/src/main/resources/log4j.properties
@@ -9,4 +9,4 @@ log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-5p %d %c - %m%n
-log4j.logger.org.springframework.web=TRACE
\ No newline at end of file
+log4j.logger.org.springframework.jdbc=TRACE
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/applicationContext.xml b/src/main/webapp/WEB-INF/applicationContext.xml
index bb97b31..0efac1f 100644
--- a/src/main/webapp/WEB-INF/applicationContext.xml
+++ b/src/main/webapp/WEB-INF/applicationContext.xml
@@ -1,8 +1,20 @@
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
+ xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
+ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
-
+
+
+
+
+
+
+
+
+
+
+