Mi is az a CRUD?
A CRUD egy mozaikszó az alapvető adattárolási műveletekre: Create, Retrieve (vagy Read), Update és Delete. Azaz létrehozás, lekérdezés, módosítás és törlés.
Hol tartunk most?
A legutóbbi plugin fejlesztés posztban (JIRA Active Objects) létrehoztam egy rekordot, majd a plugin megjelenítette a többivel együtt egy listában, mindezt egy oldalon. Így a CRUD műveletekből a C-t és az R-t már megnéztük. A JIRA dokumentációk közül egy CRUD tutor leírás és egy elérhető SVN plugin kód együttese jól mutatja az adatbázis, a megjelenítés és a háttérműveletek kapcsolatát. Ezek ötvözetével folytatom a ToDo entitásra épülő miniprojektet.
CRUD Action
A JIRA által létrehozott CRUD példa jól mutatja a lehetőségeket, de szervletet használ, így a felelősségi szintek nem válnak szét teljesen. A két példa összefésülésével a következő csomagszintű bontást használom: action (request-ek kezelése), model (adatszerkezet), service (DAO műveletek összefogása). A megjelenítéshez szükséges velocity fájlok továbbra is a templates alatt vannak.
Az Action-ök a TodoAction-ből származnak, ahol a TodoService-en keresztül mentjük és kapjuk vissza az adatokat. A TodoAction végzi az alapvető és ismétlődő validálási folyamatokat is.
TodoAction.java részlet
public class TodoAction extends JiraWebActionSupport { protected final static String VIEW_PAGE = "ViewTodoAction.jspa"; protected final TodoService todoService; public TodoAction(TodoService todoService) { this.todoService = checkNotNull(todoService); } protected void doKeyValidation() { log.debug("Entering doKeyValidation"); final String id = request.getParameter("key"); if (id == null || id.isEmpty()) { //?key= addErrorMessage(getText("todo.form.id.missing")); } else { try { todo = this.todoService.findById(Integer.valueOf(id)); todo.getDescription(); } catch (NumberFormatException e) { //?key=aaa addErrorMessage(getText("todo.form.id.wrong.format")); } catch (NullPointerException e) { //?key=111 addErrorMessage(getText("todo.form.not.found")); } } } protected void doFieldValidation() { final String description = request.getParameter("description"); if (description == null || description.isEmpty()) { addErrorMessage(getText("todo.form.description.missing")); } int maxLength = 50; if (description != null && description.length() > maxLength) { addErrorMessage(getText("todo.form.description.too.long")); } } protected Todo todo; public Todo getTodo() { return todo; } }
TodoService.java részlet
@Transactional public interface TodoService { Todo create(String description); List<todo> findAll(); List<todo> find(String description); Todo findById(int id); void delete(int id); void addComment(Todo todo, String text); }
A végeredmény
A fejlesztés eredménye egy kiindulási oldal (lista), ahonnan indíthatunk egy keresést a description mező teljes egyezésére (R), törölhetjük (D) vagy szerkeszthetjük (U) az eddig felvitt rekordokat vagy újat hozhatunk létre (C).
A fenti módosítások letölthetők SVN-en keresztül és becsomagolva a blog GoogleCode oldaláról a JiraDevTutor projektből.