* Toutes les classes qui mappent une table doivent étendre ProtectedData * Chaque méthode setter de ces classes doit commencer par : public void setXxx(....) { if (!isEditable()) throwDataUneditableException(); ... } (On lance une exception si l'objet est en mode "read-only") * Utilisation : Message m = new Message("hey", "cool", new Date().getTime() / 1000, 1, 2); m.setContent("great"); // OK, l'objet n'est pas protégé (il n'a pas été enregistré dans les CAO/DAO) DataAccess.create(m); m.setContent("super"); // Erreur, lance une exception car l'objet a été enregistré dans les CAO/DAO et est passé en mode read-only) m = DataAccess.getEditable(m); // Renvoie une copie éditable de m m.setContent("woohoo"); // OK, l'objet est éditable DataAccess.update(m); m.setContent("yay"); // Erreur, l'objet a été enregistré et n'est pas éditable DataAccess.delete(m); m.setContent("woot"); // OK, l'objet n'est plus enregistré dans les CAO/DAO De même : Message m = DataAccess.getMessageById(10); m.setContent("yo"); // Erreur, l'objet est en mode read-only List msg = DataAccess.getMessagesByPlayer(1); msg.get(0).setContent("yay"); // Idem