Package org.pentaho.platform.scheduler2.versionchecker

Source Code of org.pentaho.platform.scheduler2.versionchecker.EmbeddedVersionCheckSystemListener

/*!
* 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 (c) 2002-2013 Pentaho Corporation..  All rights reserved.
*/

package org.pentaho.platform.scheduler2.versionchecker;

import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.pentaho.platform.api.engine.IPentahoSession;
import org.pentaho.platform.api.engine.IPentahoSystemListener;
import org.pentaho.platform.api.scheduler2.IJobFilter;
import org.pentaho.platform.api.scheduler2.IScheduler;
import org.pentaho.platform.api.scheduler2.Job;
import org.pentaho.platform.api.scheduler2.JobTrigger;
import org.pentaho.platform.api.scheduler2.SchedulerException;
import org.pentaho.platform.api.scheduler2.SimpleJobTrigger;
import org.pentaho.platform.engine.core.system.PentahoSystem;
import org.pentaho.platform.util.versionchecker.PentahoVersionCheckReflectHelper;

public class EmbeddedVersionCheckSystemListener implements IPentahoSystemListener {

  /**
   * This is a direct copy of VersionCheckSystemListener except that the mechanism for talking to quartz goes through
   * the PentahoSystem factory
   */
  private static final Log logger = LogFactory.getLog( EmbeddedVersionCheckSystemListener.class );

  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"; //$NON-NLS-1$
  private boolean disableVersionCheck = false;

  public boolean startup( final IPentahoSession session ) {
    if ( isVersionCheckAvailable() ) {
      // register version check job
      try {
        int repeatSeconds = calculateRepeatSeconds();
        int versionRequestFlags = calculateRequestFlags();

        if ( !disableVersionCheck ) {
          scheduleJob( versionRequestFlags, repeatSeconds );
        } else {
          deleteJobIfNecessary();
        }
      } catch ( Exception ignoredMainException ) {
        // ignore errors by versioncheck requirements unless trace level
        if ( logger.isTraceEnabled() ) {
          logger.trace( "Exception in VersionCheck", ignoredMainException ); //$NON-NLS-1$
        }
      }

    } else {
      try {
        deleteJobIfNecessary();
      } catch ( SchedulerException ignoredOnPurpose ) {
        // By version checker requirement, we must not log unless it's trace
        if ( logger.isTraceEnabled() ) {
          logger.trace( "Exception in VersionCheck", ignoredOnPurpose ); //$NON-NLS-1$
        }
      }
    }
    return true;
  }

  public int calculateRepeatSeconds() {
    return Math.max( MIN_CHECK_INTERVAL, repeatIntervalSeconds ); // Force maximum number of times to check in a day
  }

  protected int calculateRequestFlags() {
    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$

    int versionRequestFlags =
        ( requestMajorReleases ? 4 : 0 ) + ( requestMinorReleases ? 8 : 0 ) + ( requestRCReleases ? 16 : 0 )
            + ( requestGAReleases ? 32 : 0 ) + ( requestMilestoneReleases ? 64 : 0 );
    return versionRequestFlags;
  }

  protected void scheduleJob( final int versionRequestFlags, final int repeatSeconds ) throws Exception {

    IScheduler scheduler = PentahoSystem.get( IScheduler.class, "IScheduler2", null ); //$NON-NLS-1$

    deleteJobIfNecessary();

    Map<String, Serializable> parms = new HashMap<String, Serializable>();
    parms.put( VersionCheckerAction.VERSION_REQUEST_FLAGS, new Integer( versionRequestFlags ) );
    JobTrigger trigger = new SimpleJobTrigger( new Date(), null, -1, repeatSeconds );
    scheduler.createJob( EmbeddedVersionCheckSystemListener.VERSION_CHECK_JOBNAME, VersionCheckerAction.class, parms,
        trigger );
  }

  protected void deleteJobIfNecessary() throws SchedulerException {
    IScheduler scheduler = PentahoSystem.get( IScheduler.class, "IScheduler2", null ); //$NON-NLS-1$
    IJobFilter filter = new IJobFilter() {
      public boolean accept( Job job ) {
        return job.getJobName().contains( EmbeddedVersionCheckSystemListener.VERSION_CHECK_JOBNAME );
      }
    };

    // Like old code - remove the existing job and replace it
    List<Job> matchingJobs = scheduler.getJobs( filter );
    if ( ( matchingJobs != null ) && ( matchingJobs.size() > 0 ) ) {
      for ( Job verCkJob : matchingJobs ) {
        scheduler.removeJob( verCkJob.getJobId() );
      }
    }
  }

  protected boolean isVersionCheckAvailable() {
    return PentahoVersionCheckReflectHelper.isVersionCheckerAvailable();
  }

  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;
  }

}
TOP

Related Classes of org.pentaho.platform.scheduler2.versionchecker.EmbeddedVersionCheckSystemListener

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.