package model.manager;
import java.util.List;
import org.celllife.idart.database.hibernate.Campaign;
import org.celllife.idart.database.hibernate.CampaignParticipant;
import org.celllife.mobilisr.constants.CampaignStatus;
import org.celllife.mobilisr.constants.CampaignType;
import org.hibernate.HibernateException;
import org.hibernate.Session;
public class CampaignManager {
public static void addCampaigns(Session session, List<Campaign> campaigns){
for(Campaign campaign : campaigns){
session.saveOrUpdate(campaign);
}
}
public static void addCampaign(Session session, Campaign campaign) throws HibernateException{
session.save(campaign);
}
@SuppressWarnings("unchecked")
public static Campaign getCampaignById(Session session, Long id) throws HibernateException{
List<Campaign> campaigns = session.createQuery("from Campaign where id = :id").setLong("id", id).list();
if(campaigns.size() == 1){
return campaigns.get(0);
}else{
return null;
}
}
@SuppressWarnings("unchecked")
public static Campaign getCampaignByMobilisrId(Session session, Long id) throws HibernateException{
List<Campaign> campaigns = session.createQuery("from Campaign where mobilisrid = :id").setLong("id", id).list();
if(campaigns.size() == 1){
return campaigns.get(0);
}else{
return null;
}
}
@SuppressWarnings("unchecked")
public static List<Campaign> getCampaigns(Session session) throws HibernateException{
List<Campaign> campaigns = session
.createQuery(
"from Campaign where type = :type and status = :status")
.setParameter("type", CampaignType.DAILY.name())
.setParameter("status", CampaignStatus.ACTIVE.name()).list();
return campaigns;
}
@SuppressWarnings("unchecked")
public static Campaign getCampaignByName(Session session, String name) throws HibernateException {
List<Campaign> campaigns = session.createQuery("from Campaign where name = :name").setString("name", name).list();
if(campaigns.size() == 1){
return campaigns.get(0);
}else{
return null;
}
}
public static void addCampaignParticipant(Session session, CampaignParticipant campaignParticipant)throws HibernateException {
session.save(campaignParticipant);
}
@SuppressWarnings({ "unchecked", "cast" })
public static Long getPatientRegisteredMobilisrCampaignId(Session session, int id) {
List<CampaignParticipant> participants = (List<CampaignParticipant>)session.createQuery("from CampaignParticipant where patient = :id").setInteger("id", id).list();
if(participants.size() == 1){
CampaignParticipant campaignParticipant = participants.get(0);
return campaignParticipant.getCampaign().getMobilisrId();
}else{
return null;
}
}
public static void removeCampaignParticipant(Session session, int patientId) throws HibernateException {
session.createQuery("Delete CampaignParticipant where patient_id = :patientId").setInteger("patientId", patientId).executeUpdate();
}
@SuppressWarnings("unchecked")
public static boolean isCampaignAddedToIDart(Session session, long mobilisrId) throws HibernateException {
List<Campaign> campaigns = session.createQuery("From Campaign where mobilisrid = :mobilisrId").setLong("mobilisrId", mobilisrId).list();
if(campaigns.size() > 0){
return true;
}else{
return false;
}
}
public static void updateCampaigns(Session session, List<Campaign> campaigns) throws HibernateException {
if(campaigns != null && campaigns.size() > 0 ){
for(Campaign campaign : campaigns){
if(isCampaignAddedToIDart(session, campaign.getMobilisrId())){
updateIDartCampaign(session, campaign);
}else if (CampaignStatus.ACTIVE.name().equals(campaign.getStatus())){
session.save(campaign);
}
}
}
}
private static int updateIDartCampaign(Session session, Campaign campaign) throws HibernateException{
return session.createQuery("Update Campaign set description = :description, duration = :duration, name = :name," +
" startdate = :startdate, status = :status, timesperday = :timesperday, type = :type " +
"where mobilisrid = :mobilisrid").setString("description", campaign.getDescription()).
setInteger("duration", campaign.getDuration()).setString("name", campaign.getName()).
setTimestamp("startdate", campaign.getStartDate()).setString("status", campaign.getStatus()).
setInteger("timesperday", campaign.getTimesPerDay()).setString("type", campaign.getType()).
setLong("mobilisrid", campaign.getMobilisrId()).executeUpdate();
}
}