package sushi.adapter; import java.io.IOException; import java.net.SocketException; import java.util.ArrayList; import java.util.Date; import org.json.JSONException; import org.quartz.Job; import org.quartz.JobDetail; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.quartz.SchedulerException; import org.quartz.SimpleTrigger; import org.quartz.impl.StdSchedulerFactory; import sushi.esper.SushiStreamProcessingAdapter; import sushi.event.SushiEvent; import sushi.event.SushiEventType; import sushi.eventhandling.Broker; import sushi.weather.importer.DWDImporter; import sushi.xml.importer.XMLParsingException; /** * Adapter for automated import of weather events */ public class SushiWeatherAdapter implements Job{ DWDImporter weatherImporter; long time; /** * registers automatically the WeatherEventType * start XQuarzjob with scheduleQuarzJob */ public SushiWeatherAdapter() { weatherImporter = new DWDImporter(); } public static void main(String[] args) throws JSONException, SocketException, IOException, XMLParsingException { SushiStreamProcessingAdapter.getInstance().setActivatedWeatherAdapter(true); SushiWeatherAdapter weatherAdapter = new SushiWeatherAdapter(); weatherAdapter.scheduleQuartzJob(); } private void registerWeatherEventType() { try { if (SushiEventType.findBySchemaName("legend_warnings_CAP") != null) return; Broker.send(weatherImporter.getWeatherEventtype()); } catch (XMLParsingException e) { } } /** * sends newest weatherevents to esper */ private void importWeatherEvents() throws JSONException, XMLParsingException, IOException{ registerWeatherEventType(); ArrayList<SushiEvent> weatherEvents = weatherImporter.getNewWeatherEvents(); Broker.send(weatherEvents); } public void deleteQuartzJob() { try { // Grab the Scheduler instance from the Factory org.quartz.Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); scheduler.deleteJob("weatherJob","group2"); } catch (SchedulerException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } public void scheduleQuartzJob(){ try { // Grab the Scheduler instance from the Factory org.quartz.Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); // define the job and tie it to our SushiWeatherAdapter class JobDetail jd = new JobDetail("weatherJob","group2", SushiWeatherAdapter.class); // triggers all 120.5 seconds the execution of execution, never ends SimpleTrigger simpleTrigger = new SimpleTrigger("my weather job",scheduler.DEFAULT_GROUP, new Date(),null,SimpleTrigger.REPEAT_INDEFINITELY,120500); // Tell quartz to schedule the job using our trigger scheduler.scheduleJob(jd, simpleTrigger); // and start it scheduler.start(); //scheduler.shutdown(); } catch (SchedulerException se) { se.printStackTrace(); } } @Override public void execute(JobExecutionContext arg0) throws JobExecutionException { try { if (SushiStreamProcessingAdapter.getInstance().isActivatedWeatherAdapter()) importWeatherEvents(); } catch (JSONException | XMLParsingException | IOException e) { e.printStackTrace(); } } }