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"> - + + + + + + + + + + +