/** * Implements operations for managing the task_answer table of the aidr_predict DB * * @author Koushik */ package qa.qcri.aidr.dbmanager.ejb.remote.facade.imp; import java.util.ArrayList; import java.util.List; import javax.ejb.Stateless; import org.apache.log4j.Logger; import org.hibernate.criterion.Criterion; import org.hibernate.criterion.Restrictions; import qa.qcri.aidr.dbmanager.dto.TaskAnswerDTO; import qa.qcri.aidr.dbmanager.ejb.local.facade.impl.CoreDBServiceFacadeImp; import qa.qcri.aidr.dbmanager.ejb.remote.facade.TaskAnswerResourceFacade; import qa.qcri.aidr.dbmanager.entities.task.TaskAnswer; @Stateless(name="TaskAnswerResourceFacadeImp") public class TaskAnswerResourceFacadeImp extends CoreDBServiceFacadeImp<TaskAnswer, Long> implements TaskAnswerResourceFacade { private Logger logger = Logger.getLogger("db-manager-log"); protected TaskAnswerResourceFacadeImp(){ super(TaskAnswer.class); } @Override public void insertTaskAnswer(TaskAnswerDTO taskAnswer) { if (taskAnswer != null) { logger.debug("Going to insert answer = " + taskAnswer.getAnswer() + " for documentId = " + taskAnswer.getDocumentID()); try { TaskAnswerDTO answer = getTaskAnswer(taskAnswer.getDocumentID(), taskAnswer.getUserID()); if(answer == null) { TaskAnswer t = taskAnswer.toEntity(); em.persist(t); em.flush(); } } catch (Exception e) { logger.error("Unable to save taskAnswer: " + taskAnswer.getDocumentID() + ", " + taskAnswer.getUserID() + ", " + taskAnswer.getAnswer(), e); } } else { logger.warn("Warning! Attempted to insert null task answer!"); } } @Override public List<TaskAnswerDTO> getTaskAnswer(Long documentID) { Criterion criterion = Restrictions.eq("id.documentId", documentID); List<TaskAnswer> list = getAllByCriteria(criterion); if (list != null && !list.isEmpty()) { List<TaskAnswerDTO> dtoList = new ArrayList<TaskAnswerDTO>(); for (TaskAnswer t: list) { dtoList.add(new TaskAnswerDTO(t)); } return dtoList; } return null; } @Override public TaskAnswerDTO getTaskAnswer(Long documentID, Long userID) { Criterion criterion = Restrictions.conjunction() .add(Restrictions.eq("id.documentId", documentID)) .add(Restrictions.eq("id.userId", userID)); TaskAnswer t = getByCriteria(criterion); return t != null ? new TaskAnswerDTO(t) : null; } @Override public int undoTaskAnswer(Long documentID, Long userID) { try { TaskAnswerDTO taskAnswerDTO = (TaskAnswerDTO) getTaskAnswer(documentID, userID); if(taskAnswerDTO!=null){ Object managed = em.merge(taskAnswerDTO.toEntity()); em.remove(managed); em.flush(); return 1; } } catch (Exception e) { logger.error("Error in undo operation!"); } return 0; } @Override public boolean deleteTaskAnswer(Long documentID) { try { Criterion criterion = Restrictions.eq("id.documentId", documentID); List<TaskAnswer> answers = getAllByCriteria(criterion); if(answers != null) { // delete task for (TaskAnswer taskAnswer : answers) { delete(taskAnswer); } } return true; } catch (Exception e) { logger.error("Error in deleting taskAnswer give documentID : " + documentID); return false; } } }