package qa.qcri.aidr.trainer.api.dao.impl;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Repository;
import qa.qcri.aidr.trainer.api.dao.ImageTaskQueueDao;
import qa.qcri.aidr.trainer.api.dto.ImageTaskQueueDTO;
import qa.qcri.aidr.trainer.api.entity.ImageTaskQueue;
@SuppressWarnings("unchecked")
@Repository
public class ImageTaskQueueDaoImpl extends AbstractDaoImpl<ImageTaskQueue, String> implements ImageTaskQueueDao {
protected ImageTaskQueueDaoImpl(){
super(ImageTaskQueue.class);
}
@Override
public List<ImageTaskQueue> findImageTaskQueue(Long taskID, Long clientAppID) {
return findByCriteria(Restrictions.conjunction()
.add(Restrictions.eq("taskQueue.taskQueueID",taskID))
.add(Restrictions.eq("taskQueue.clientAppID", clientAppID))
.add(Restrictions.isNotNull("category")));
}
@Override
public List<ImageTaskQueue> findImageTaskQueueSetByClientApp(Long clientAppID) {
return findByCriteria(Restrictions.conjunction()
.add(Restrictions.eq("taskQueue.clientAppID", clientAppID))
.add(Restrictions.isNotNull("category")));
}
@Override
public List<ImageTaskQueue> findImageTaskQueueSetByCrisis(Long crisisID) {
List<ImageTaskQueue> imageTasks = new ArrayList<ImageTaskQueue>();
String sql = "SELECT a.image_url,a.image_text,a.category,a.lat,a.lon,a.location "
+ " FROM image_task_queue a \n"
+ " JOIN task_queue b ON a.task_queue_id = b.id \n"
+ " JOIN client_app c ON b.client_app_id = c.id \n"
+ " where c.crisis_id = :crisisID and a.category IS NOT NULL";
try {
Query query = getCurrentSession().createSQLQuery(sql);
query.setParameter("crisisID", crisisID);
List<Object[]> results = query.list();
for (Object[] result : results) {
ImageTaskQueue imageTaskQueue = new ImageTaskQueue();
imageTaskQueue.setImageUrl((String)result[0]);
imageTaskQueue.setImageText((String)result[1]);
imageTaskQueue.setCategory((String)result[2]);
imageTaskQueue.setLatitude((String)result[3]);
imageTaskQueue.setLongitude((String)result[4]);
imageTaskQueue.setLocation((String)result[5]);
imageTasks.add(imageTaskQueue);
}
} catch (Exception e) {
System.out.println("exception in imageTaskQueue:" + e);
}
return imageTasks;
}
@Override
public Long findImageTaskQueueCountByCrisis(Long crisisID) {
Long totalRows = 0L;
String sql = "SELECT count(1) FROM image_task_queue a \n"
+ " JOIN task_queue b ON a.task_queue_id = b.id \n"
+ " JOIN client_app c ON b.client_app_id = c.id \n"
+ " where c.crisis_id = :crisisID and a.category IS NOT NULL";
Query query = getCurrentSession().createSQLQuery(sql);
query.setParameter("crisisID", crisisID);
Object res = query.uniqueResult();
if (res != null) {
totalRows = Long.parseLong(res.toString());
}
return totalRows;
}
@Override
public List<ImageTaskQueueDTO> findImageTaskQueueSetByCrisis(Long crisisID, int fromRecord, int limit, String sortColumn,
String sortDirection) {
List<ImageTaskQueueDTO> imageTasks = new ArrayList<ImageTaskQueueDTO>();
String orderSQLPart = "";
if (sortColumn != null && !sortColumn.isEmpty()){
if (sortDirection != null && !sortDirection.isEmpty()) {
if ("ASC".equals(sortDirection)) {
sortDirection = "ASC";
} else {
sortDirection = "DESC";
}
} else {
sortDirection = "DESC";
}
orderSQLPart += " ORDER BY " + sortColumn + " " + sortDirection + " ";
}
Long totalRows = findImageTaskQueueCountByCrisis(crisisID);
String sql = "SELECT a.image_url,a.image_text,a.category,a.lat,a.lon,a.location "
+ " FROM image_task_queue a \n"
+ " JOIN task_queue b ON a.task_queue_id = b.id \n"
+ " JOIN client_app c ON b.client_app_id = c.id \n"
+ " where c.crisis_id = :crisisID and a.category IS NOT NULL " + orderSQLPart
+ " offset :fromRecord limit :limit";
try {
Query query = getCurrentSession().createSQLQuery(sql);
query.setParameter("crisisID", crisisID);
query.setParameter("fromRecord", fromRecord);
query.setParameter("limit", limit);
List<Object[]> results = query.list();
for (Object[] result : results) {
ImageTaskQueueDTO imageTaskQueue = new ImageTaskQueueDTO();
imageTaskQueue.setImageUrl((String)result[0]);
imageTaskQueue.setImageText((String)result[1]);
imageTaskQueue.setCategory((String)result[2]);
imageTaskQueue.setLatitude((String)result[3]);
imageTaskQueue.setLongitude((String)result[4]);
imageTaskQueue.setLocation((String)result[5]);
imageTaskQueue.setTotalRows(totalRows);
imageTasks.add(imageTaskQueue);
}
} catch (Exception e) {
System.out.println("exception in imageTaskQueue:" + e);
}
return imageTasks;
}
}