package com.ximple.eofms; import javax.swing.JFrame; import javax.swing.SwingUtilities; import java.util.Date; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; import org.apache.commons.cli.HelpFormatter; import org.apache.commons.cli.Option; import org.apache.commons.cli.OptionBuilder; import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; import org.apache.commons.cli.PosixParser; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.awl.Wizard; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.Trigger; import org.quartz.TriggerUtils; import org.quartz.impl.StdSchedulerFactory; import com.ximple.eofms.jobs.OracleConvertDgn2ShpJob; /** * Hello world! */ public class XQuartzJobCarrier { static Log logger = LogFactory.getLog(XQuartzJobCarrier.class); static Options options = new Options(); private static final String VERSION = "0.9.0"; public static void main(String[] args) { XQuartzJobCarrier instance = new XQuartzJobCarrier(); instance.initializeOption(); instance.execute(args); } private void initializeOption() { Option option; option = OptionBuilder.create("help"); option.setDescription("print this message"); options.addOption(option); option = OptionBuilder.create("version"); option.setDescription("print the version information and exit"); options.addOption(option); option = OptionBuilder.create("wizard"); option.setDescription("start wizard mode"); options.addOption(option); option = OptionBuilder.create("verbose"); option.setDescription("be extra verbose"); options.addOption(option); option = OptionBuilder.create("debug"); option.setDescription("print debugging information"); options.addOption(option); option = OptionBuilder.create("jobfile"); option.setDescription("use given jobfile"); option.setArgName("file"); options.addOption(option); } private void execute(String[] args) { // CommandLineParser parser = new GnuParser(); CommandLineParser parser = new PosixParser(); CommandLine commandLine = null; try { // parse the command commandLine arguments commandLine = parser.parse(options, args); } catch (ParseException exp) { // oops, something went wrong System.err.println("Parsing failed. Reason: " + exp.getMessage()); } if ((commandLine != null) && (commandLine.getOptions().length > 0)) { if (commandLine.hasOption("help")) { printHelpMessage(); } else if (commandLine.hasOption("version")) { printVersionMessage(); } else if (commandLine.hasOption("wizard")) { startWizardMode(); } return; } startScheduler(); } private void printHelpMessage() { HelpFormatter formatter = new HelpFormatter(); formatter.printHelp("XQuartzJobCarrier", options); } private void printVersionMessage() { System.out.println("XQuartzJobCarrier - " + VERSION); } public void startWizardMode() { Runnable runnable = new Runnable() { public void run() { Wizard wizard = new XQuartzJobWizard((JFrame) null); wizard.pack(); wizard.setVisibleOnCenterOfScreen(); } }; try { SwingUtilities.invokeLater(runnable); } catch (Exception ex) { ex.printStackTrace(); } } public void startScheduler() { Scheduler scheduler = null; boolean shutdown = false; try { // Get a Scheduler instance from the Factory scheduler = StdSchedulerFactory.getDefaultScheduler(); // Start the scheduler scheduler.start(); logger.info("Scheduler started at " + new Date()); } catch (SchedulerException ex) { // deal with any exceptions logger.error(ex); shutdown = true; } catch (Throwable throwable) { logger.error(throwable.getMessage(), throwable); shutdown = true; } if (shutdown) { try { scheduler.shutdown(); } catch (SchedulerException e) { logger.error(e.getMessage(), e); } } } /* * return an instance of the Scheduler from the factory */ public Scheduler createScheduler() throws SchedulerException { return StdSchedulerFactory.getDefaultScheduler(); } // Create and Schedule a ScanDirectoryJob with the Scheduler private void scheduleJob(Scheduler scheduler) throws SchedulerException { // Create a JobDetail for the Job JobDetail jobDetail = new JobDetail("ScanDirectory", Scheduler.DEFAULT_GROUP, OracleConvertDgn2ShpJob.class); // Configure the directory to scan jobDetail.getJobDataMap().put("SCAN_DIR", "c:\\quartz-book\\input"); // Create a trigger that fires every 10 seconds, forever Trigger trigger = TriggerUtils.makeSecondlyTrigger(10); trigger.setName("scanTrigger"); // Start the trigger firing from now trigger.setStartTime(new Date()); // Associate the trigger with the job in the scheduler scheduler.scheduleJob(jobDetail, trigger); } }