package er.quartzscheduler.foundation; import org.apache.log4j.Logger; import org.quartz.JobExecutionContext; import com.webobjects.eocontrol.EOEditingContext; import com.webobjects.eocontrol.EOGlobalID; import er.extensions.eof.ERXEC; import er.quartzscheduler.util.ERQSSchedulerServiceFrameworkPrincipal; /** * The abstract listener provides reusable methods like editingContext and getJobDescription to any listener like ERQSJobListener.<p> * This class can be used if you need to create your own job listener or trigger listener. * * @author Philippe Rabier * */ public abstract class ERQSAbstractListener { protected static final Logger log = Logger.getLogger(ERQSAbstractListener.class); private final ERQSSchedulerServiceFrameworkPrincipal schedulerFPInstance; private EOEditingContext editingContext; public ERQSAbstractListener(final ERQSSchedulerServiceFrameworkPrincipal schedulerFPInstance) { this.schedulerFPInstance = schedulerFPInstance; } /** * Send back the ERQSJobDescription object attached to the job. * * @param context the JobExecutionContext * @param ec * @return the ERQSJobDescription object. */ protected ERQSJobDescription getJobDescription(final JobExecutionContext context, final EOEditingContext ec) { ERQSJobDescription aJobDescription = null; if (context.getMergedJobDataMap() != null) { EOGlobalID id = (EOGlobalID) context.getMergedJobDataMap().get(ERQSJob.ENTERPRISE_OBJECT_KEY); if (id != null) aJobDescription = (ERQSJobDescription) ec.faultForGlobalID(id, ec); else aJobDescription = (ERQSJobDescription) context.getMergedJobDataMap().get(ERQSJob.NOT_PERSISTENT_OBJECT_KEY); } return aJobDescription; } /** * Return a "regular" editing context with the current objectStore using directly the ERXEC factory. * * @return an ec */ protected EOEditingContext editingContext() { if (editingContext == null) editingContext = ERXEC.newEditingContext(); return editingContext; } /** * Return the instance of the scheduler framework principal instance */ public ERQSSchedulerServiceFrameworkPrincipal getSchedulerFPInstance() { return schedulerFPInstance; } }