package org.akaza.openclinica.control; import java.util.Map; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import org.akaza.openclinica.dao.core.CoreResources; import org.akaza.openclinica.dao.hibernate.OpenClinicaVersionDAO; import org.akaza.openclinica.dao.hibernate.UsageStatsServiceDAO; import org.akaza.openclinica.domain.OpenClinicaVersionBean; import org.akaza.openclinica.service.usageStats.LogUsageStatsService; /** * ServletContextListener used as a controller for throwing an error when * reading up the properties * * @author jnyayapathi, pgawade * */ public class OCServletContextListener implements ServletContextListener { private final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(this.getClass().getName()); UsageStatsServiceDAO usageStatsServiceDAO; OpenClinicaVersionDAO openClinicaVersionDAO; public static String OpenClinicaVersion = "OpenClinica.version"; @Override public void contextDestroyed(ServletContextEvent event) { logger.debug("OCServletContextListener -> contextDestroyed"); // Save the OpenClinica stop time into database ServletContext context = event.getServletContext(); getUsageStatsServiceDAO(context).saveOCStopTimeToDB(); } @Override public void contextInitialized(ServletContextEvent event) { logger.debug("OCServletContextListener -> contextInitialized"); CoreResources cr = (CoreResources) SpringServletAccess.getApplicationContext(event.getServletContext()).getBean("coreResources"); // @pgawade 25-March-2011 changes for sending usage statistics from // OpenClinica instance ServletContext context = event.getServletContext(); // Save OpenClinica version to database getOpenClinicaVersionDAO(context).saveOCVersionToDB(CoreResources.getField(OpenClinicaVersion)); // Fetch the OpenClinica started event details Map<String, String> OCStartEventDetails = getEventDetailsOCStart(context); // Log usage statistics event OpenClinca started LogUsageStatsService.logEventOCStart(OCStartEventDetails); // Save the OpenClinica start time into database getUsageStatsServiceDAO(context).saveOCStartTimeToDB(); } private Map<String, String> getEventDetailsOCStart(ServletContext context) { Map<String, String> OCStartEventDetails = getUsageStatsServiceDAO(context).getEventDetailsOCStart(); // add OpenClinica version into OC start event details OpenClinicaVersionBean openClinicaVersionBean = getOpenClinicaVersionDAO(context).findDefault(); if (null != openClinicaVersionBean) { OCStartEventDetails.put(LogUsageStatsService.OC_version, openClinicaVersionBean.getName()); } return OCStartEventDetails; } private UsageStatsServiceDAO getUsageStatsServiceDAO(ServletContext context) { usageStatsServiceDAO = this.usageStatsServiceDAO != null ? usageStatsServiceDAO : (UsageStatsServiceDAO) SpringServletAccess.getApplicationContext(context).getBean( "usageStatsServiceDAO"); return usageStatsServiceDAO; } private OpenClinicaVersionDAO getOpenClinicaVersionDAO(ServletContext context) { openClinicaVersionDAO = this.openClinicaVersionDAO != null ? openClinicaVersionDAO : (OpenClinicaVersionDAO) SpringServletAccess.getApplicationContext(context).getBean( "openClinicaVersionDAO"); return openClinicaVersionDAO; } }