package org.oliot.epcis.service.subscription;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.log4j.Level;
import org.hibernate.Query;
import org.hibernate.Session;
import org.oliot.epcis.configuration.Configuration;
import org.oliot.epcis.serde.sql.DBConfiguration;
import org.oliot.epcis.serde.sql.HibernateUtil;
import org.oliot.epcis.service.query.sql.MysqlQueryService;
import org.oliot.epcis.service.query.sql.QueryOprationBackend;
import org.oliot.model.epcis.SubscriptionType;
import org.oliot.model.oliot.DBUser;
import org.oliot.model.oliot.Subscription;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* Copyright (C) 2014 KAIST RESL
*
* This project is part of Oliot (oliot.org), pursuing the implementation of
* Electronic Product Code Information Service(EPCIS) v1.1 specification in
* EPCglobal.
* [http://www.gs1.org/gsmp/kc/epcglobal/epcis/epcis_1_1-standard-20140520.pdf]
*
*
* @author Jack Jaewook Byun, Ph.D student
*
* Korea Advanced Institute of Science and Technology (KAIST)
*
* Real-time Embedded System Laboratory(RESL)
*
* bjw0829@kaist.ac.kr
*/
@SuppressWarnings("unused")
public class MysqlSubscription {
public static SchedulerFactory schedFact;
public static Scheduler sched;
public void init() {
try {
schedFact = new org.quartz.impl.StdSchedulerFactory();
sched = schedFact.getScheduler();
if (sched.isStarted() == false)
sched.start();
Configuration.logger.log(Level.INFO,
"Loading pre-existing subscription ...");
// ApplicationContext ctx=new ClassPathXmlApplicationContext(Configuration.DB);
// QueryOprationBackend mysqlOperationdao=ctx.getBean
// ("queryOprationBackend", QueryOprationBackend.class);
List<SubscriptionType> allSubscription=Configuration.mysqlOperationdaoQr.findAllSubscriptionType();
// ((AbstractApplicationContext) ctx).close();
MysqlQueryService queryService = new MysqlQueryService();
for (int i = 0; i < allSubscription.size(); i++) {
Configuration.logger.info("subscription: "+i);
SubscriptionType subscription = allSubscription.get(i);
if(subscription.getSchedule() != null && subscription.getTrigger() != null){
queryService.addScheduleToQuartz(subscription);
}else if(subscription.getSchedule() == null && subscription.getTrigger() !=null){
TriggerEngine.addTriggerSubscription(subscription.getSubscriptionID(), subscription);
}
}
} catch (SchedulerException e) {
Configuration.logger.log(Level.ERROR, e.toString());
}
}
}