package qa.qcri.aidr.predictui.facade.imp; import qa.qcri.aidr.common.exception.PropertyNotSetException; import qa.qcri.aidr.dbmanager.dto.DocumentDTO; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.ejb.EJB; import javax.ejb.Stateless; import org.apache.log4j.Logger; import org.hibernate.criterion.Criterion; import org.hibernate.criterion.Restrictions; import qa.qcri.aidr.predictui.facade.DocumentFacade; import qa.qcri.aidr.predictui.util.ResponseWrapper; import qa.qcri.aidr.predictui.util.TaggerAPIConfigurationProperty; import qa.qcri.aidr.predictui.util.TaggerAPIConfigurator; import qa.qcri.aidr.dbmanager.ejb.remote.facade.TaskManagerRemote; /** * * @author koushik */ @Stateless public class DocumentFacadeImp implements DocumentFacade { @EJB private TaskManagerRemote<DocumentDTO, Long> remoteTaskManager; @EJB private qa.qcri.aidr.dbmanager.ejb.remote.facade.DocumentResourceFacade remoteDocument; @EJB private qa.qcri.aidr.dbmanager.ejb.remote.facade.DocumentNominalLabelResourceFacade remoteDocumentNominalLabel; protected static Logger logger = Logger.getLogger("aidr-tagger-api"); public List<DocumentDTO> getAllDocuments() { List<DocumentDTO> fetchedList = remoteTaskManager.getAllTasks(); return fetchedList; } public DocumentDTO getDocumentByID(Long id) { DocumentDTO fetchedDoc = remoteTaskManager.getTaskById(id); return fetchedDoc; } public List<DocumentDTO> getAllLabeledDocumentbyCrisisID(Long crisisID, Long attributeID) { Criterion criterion = Restrictions.eq("hasHumanLabels", true); List<DocumentDTO> fetchedList = remoteTaskManager.getTaskCollectionByCriterion(crisisID, null, criterion); return fetchedList; } @Override public int deleteDocument(Long documentID) { return remoteTaskManager.deleteTaskById(documentID); } @Override public ResponseWrapper removeTrainingExample(Long documentID) { // Alternative way of doing the same update //qa.qcri.aidr.task.dto.DocumentDTO fetchedDoc = remoteTaskManager.getTaskById(id); //fetchedDoc.setHasHumanLabels(false); //fetchedDoc.setNominalLabelCollection(null); //taskManager.updateTask(fetchedDoc); Map<String, String> paramMap = new HashMap<String, String>(); paramMap.put("setHasHumanLabels", new Boolean(false).toString()); try { DocumentDTO newDoc = (DocumentDTO) remoteTaskManager.setTaskParameter(qa.qcri.aidr.dbmanager.entities.task.Document.class, documentID, paramMap); if (newDoc != null) { Criterion criterion = Restrictions.eq("id.documentId", documentID); remoteDocumentNominalLabel.deleteByCriteria(criterion); if (!remoteDocumentNominalLabel.isDocumentExists(documentID)) { logger.info("Removed training example: " + newDoc.getDocumentID() + ", for crisisID = " + newDoc.getCrisisDTO().getCrisisID()); return new ResponseWrapper(TaggerAPIConfigurator.getInstance().getProperty(TaggerAPIConfigurationProperty.STATUS_CODE_SUCCESS), "Deleted training example id " + documentID); } else { logger.error("Could NOT remove document from document nominal label table! id = " + documentID + "hasHumanLabels = " + remoteDocument.findDocumentByID(documentID).getHasHumanLabels()); return new ResponseWrapper(TaggerAPIConfigurator.getInstance().getProperty(TaggerAPIConfigurationProperty.STATUS_CODE_FAILED), "Error while deleting training example id " + documentID); } } else { logger.error("Could NOT remove document from document nominal label table! id = " + documentID + "hasHumanLabels = " + remoteDocument.findDocumentByID(documentID).getHasHumanLabels()); return new ResponseWrapper(TaggerAPIConfigurator.getInstance().getProperty(TaggerAPIConfigurationProperty.STATUS_CODE_FAILED), "Error while deleting training example id " + documentID); } } catch (Exception e) { logger.error("Error while deleting training example id " + documentID, e); return new ResponseWrapper(TaggerAPIConfigurator.getInstance().getProperty(TaggerAPIConfigurationProperty.STATUS_CODE_FAILED), "Error while deleting training example id " + documentID); } } @Override public Integer getUnlabeledDocumentsCountByCrisisID(Long crisisID) { Integer count = 0; try { count = remoteDocument.getUnlabeledDocumentsCountByCrisisID(crisisID); } catch (PropertyNotSetException e) { logger.error("Error in getUnlabeledDocumentsCountByCrisisID for crisis : " + crisisID, e); } return count; } @Override public List<DocumentDTO> getAllUnlabeledDocumentbyCrisisID(Long crisisID) { Criterion criterion = Restrictions.eq("hasHumanLabels", false); List<DocumentDTO> fetchedList = remoteTaskManager.getTaskCollectionByCriterion(crisisID, null, criterion); return fetchedList; } }