/* * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software * Foundation. * * You should have received a copy of the GNU Lesser General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html * or from the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Lesser General Public License for more details. * * Copyright 2007 - 2009 Pentaho Corporation. All rights reserved. * * * @created Sep 17, 2007 * @author Will Gorman */ package org.pentaho.platform.scheduler.versionchecker; import org.pentaho.platform.api.engine.IPentahoSession; import org.pentaho.platform.api.engine.IPentahoSystemListener; import org.pentaho.platform.api.engine.ISystemSettings; import org.pentaho.platform.engine.core.system.PentahoSystem; import org.pentaho.platform.plugin.services.versionchecker.PentahoVersionCheckReflectHelper; import org.pentaho.platform.scheduler.QuartzSystemListener; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SimpleTrigger; import org.quartz.Trigger; public class VersionCheckSystemListener implements IPentahoSystemListener { private static final String VERSION_CHECK_JOBNAME = "PentahoSystemVersionCheck"; //$NON-NLS-1$ private static int MIN_CHECK_INTERVAL = 43200; private static int DEFAULT_CHECK_INTERVAL = 86400; private int repeatIntervalSeconds = DEFAULT_CHECK_INTERVAL; private String requestedReleases = "minor, ga"; private boolean disableVersionCheck = false; public boolean startup(final IPentahoSession session) { if (PentahoVersionCheckReflectHelper.isVersionCheckerAvailable()) { // register version check job try { final ISystemSettings config = PentahoSystem.getSystemSettings(); int repeatSeconds = Math.max(MIN_CHECK_INTERVAL, repeatIntervalSeconds); // Force maximum number of times to check in a day int versionRequestFlags = -1; boolean requestMajorReleases = requestedReleases.indexOf("major") >= 0; //$NON-NLS-1$ boolean requestMinorReleases = requestedReleases.indexOf("minor") >= 0; //$NON-NLS-1$ boolean requestRCReleases = requestedReleases.indexOf("rc") >= 0; //$NON-NLS-1$ boolean requestGAReleases = requestedReleases.indexOf("ga") >= 0; //$NON-NLS-1$ boolean requestMilestoneReleases = requestedReleases.indexOf("milestone") >= 0; //$NON-NLS-1$ versionRequestFlags = (requestMajorReleases ? 4 : 0) + (requestMinorReleases ? 8 : 0) + (requestRCReleases ? 16 : 0) + (requestGAReleases ? 32 : 0) + (requestMilestoneReleases ? 64 : 0); if (!disableVersionCheck) { scheduleJob(versionRequestFlags, repeatSeconds); } else { deleteJobIfNecessary(); } } catch (Exception e) { // ignore errors } } else { deleteJobIfNecessary(); } return true; } protected void scheduleJob(final int versionRequestFlags, final int repeatSeconds) throws Exception { Scheduler sched = QuartzSystemListener.getSchedulerInstance(); JobDetail jobDetail = new JobDetail(VersionCheckSystemListener.VERSION_CHECK_JOBNAME, Scheduler.DEFAULT_GROUP, VersionCheckerJob.class); // setup version request flags jobDetail.getJobDataMap().put(VersionCheckerJob.VERSION_REQUEST_FLAGS, versionRequestFlags); // do not persist the job jobDetail.setVolatility(true); Trigger trigger = new SimpleTrigger( "DailyTrigger", Scheduler.DEFAULT_GROUP, SimpleTrigger.REPEAT_INDEFINITELY, repeatSeconds * 1000); //$NON-NLS-1$ // do not persist the trigger trigger.setVolatility(true); if (sched.getJobDetail(jobDetail.getName(), Scheduler.DEFAULT_GROUP) != null) { sched.deleteJob(jobDetail.getName(), Scheduler.DEFAULT_GROUP); } sched.scheduleJob(jobDetail, trigger); } protected void deleteJobIfNecessary() { try { // delete the job if it exists in the system Scheduler sched = QuartzSystemListener.getSchedulerInstance(); if (sched.getJobDetail(VersionCheckSystemListener.VERSION_CHECK_JOBNAME, Scheduler.DEFAULT_GROUP) != null) { sched.deleteJob(VersionCheckSystemListener.VERSION_CHECK_JOBNAME, Scheduler.DEFAULT_GROUP); } } catch (Exception e) { // ignore errors } } public void shutdown() { } public int getRepeatIntervalSeconds() { return repeatIntervalSeconds; } public void setRepeatIntervalSeconds(int repeatIntervalSeconds) { this.repeatIntervalSeconds = repeatIntervalSeconds; } public String getRequestedReleases() { return requestedReleases; } public void setRequestedReleases(String requestedReleases) { this.requestedReleases = requestedReleases; } public boolean isDisableVersionCheck() { return disableVersionCheck; } public void setDisableVersionCheck(boolean disableVersionCheck) { this.disableVersionCheck = disableVersionCheck; } }