package br.ufpr.c3sl.daoconcrete; import java.util.ArrayList; import java.util.Date; import java.util.List; import br.ufpr.c3sl.dao.MistakeDAO; import br.ufpr.c3sl.daoFactory.DB4ODAOFactory; import br.ufpr.c3sl.exception.UserException; import br.ufpr.c3sl.model.Mistake; import br.ufpr.c3sl.model.User; import com.db4o.EmbeddedObjectContainer; import com.db4o.ObjectSet; import com.db4o.query.Predicate; public class DB4OMistake implements MistakeDAO{ @Override public Mistake insert(Mistake mistake) throws UserException { EmbeddedObjectContainer dbo = DB4ODAOFactory.getConnection(); mistake.setCreatedAt(new Date().getTime()); dbo.store(mistake); return mistake; } @Override public List<Mistake> getAll(final User user, final String learningObjectString) { EmbeddedObjectContainer dbo = DB4ODAOFactory.getConnection(); //TODO: ORDER BY created_at DESC List<Mistake> results = dbo.query(new Predicate<Mistake>() { private static final long serialVersionUID = 7067504373296785410L; public boolean match(Mistake mistake){ return (mistake.getUser().getEmail().equals(user.getEmail()) && mistake.getLearningObject().equals(learningObjectString)); } }); ArrayList<Mistake> list = new ArrayList<Mistake>(); list.addAll(results); return list; } /** * delete a mistake from DB40 * @param mistake */ public boolean delete(Mistake mistake) { try { EmbeddedObjectContainer dbo = DB4ODAOFactory.getConnection(); Mistake found = null; Mistake m = new Mistake(); m.setCreatedAt(mistake.getCreatedAt()); m.setLearningObject(mistake.getLearningObject()); m.setUser(mistake.getUser()); m.setMistakeInfo(null); ObjectSet<Mistake> result = dbo.queryByExample(m); found = result.next(); dbo.delete(found); dbo.delete(found.getMistakeInfo()); }catch (Exception e) { e.printStackTrace(); return false; } return true; } }