package qa.qcri.aidr.trainer.api.service.impl;
import java.util.List;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import qa.qcri.aidr.dbmanager.dto.DocumentDTO;
import qa.qcri.aidr.dbmanager.ejb.remote.facade.TaskManagerRemote;
import qa.qcri.aidr.dbmanager.entities.misc.Users;
import qa.qcri.aidr.trainer.api.service.TaskAssignmentService;
import qa.qcri.aidr.trainer.api.service.UsersService;
@Service("taskAssignmentService")
@Transactional(readOnly = true)
public class TaskAssignmentServiceImpl implements TaskAssignmentService {
//@Autowired
//private TaskAssignmentDao taskAssignmentDao;
@Autowired
private UsersService usersService;
@Autowired TaskManagerRemote<DocumentDTO, Long> taskManager;
protected static Logger logger = Logger.getLogger(TaskAnswerServiceImpl.class);
@Override
@Transactional(readOnly = false, propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
public void revertTaskAssignmentByUserName(Long documentID, String userName) {
/*
Users users = usersDao.findUserByName(userName);
if(users!= null){
Long userID = users.getUserID();
// System.out.println("userID : " + userID);
taskAssignmentDao.undoTaskAssignment(documentID,userID);
}
*/
Users users = null;
users = usersService.findUserByName(userName);
if(users!= null){
Long userID = users.getId();
//System.out.println("userID : " + userID);
//taskAssignmentDao.undoTaskAssignment(documentID,userID);
try {
taskManager.undoTaskAssignment(documentID, userID);
} catch (Exception e) {
logger.error(" Error in revertTaskAssignmentByUserName for User: "+userName+"\t"+e.getStackTrace());
}
}
}
@Override
@Transactional(readOnly = false, propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
public void revertTaskAssignment(Long documentID, Long userID) {
//taskAssignmentDao.undoTaskAssignment(documentID,userID);
try {
taskManager.undoTaskAssignment(documentID, userID);
//logger.info("Removed from taskAssignment table: documentID = " + documentID + ", userID = " + userID);
} catch (Exception e) {
logger.error(" Error while reverting Task Assignment for userID: "+userID+"\t"+e.getStackTrace());
}
}
@Override
public Integer getPendingTaskCount(Long userID) {
//return taskAssignmentDao.getPendingTaskCount(userID);
//System.out.println("[getPendingTaskCount] received request for userID = " + userID);
return taskManager.getPendingTaskCountByUser(userID);
}
@Override
@Transactional(readOnly = false, propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
public void addToTaskAssignment(List<DocumentDTO> documents, Long userID){
//taskAssignmentDao.insertTaskAssignment(documents, userID);
//List<qa.qcri.aidr.task.entities.Document> docList = mapper.deSerializeList(jsonString, new TypeReference<List<qa.qcri.aidr.task.entities.Document>>() {});
try {
//System.out.println("[addToTaskAssignment] Going to insert task list of size = " + documents.size() + ", for userID: " + userID);
taskManager.assignNewTaskToUser(documents, userID);
} catch (Exception e) {
logger.error("Error while adding Task Assignment for userID="+userID+"\t"+e.getStackTrace());
}
}
@Override
@Transactional(readOnly = false, propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
public void addToOneTaskAssignment(Long documentID, Long userID){
//taskAssignmentDao.insertOneTaskAssignment(documentID, userID);
try {
//System.out.println("[addToOneTaskAssignment] Going to insert document = " + documentID + ", for userID: " + userID);
taskManager.assignNewTaskToUser(documentID, userID);
} catch (Exception e) {
// TODO Auto-generated catch block
logger.error("Error while adding To OneTaskAssignment for user ID="+userID+"\t"+e.getStackTrace());
}
}
}