view software/mpdl-services-new/mpiwg-mpdl-cms/src/de/mpg/mpiwg/berlin/mpdl/cms/scheduler/CmsDocJob.java @ 25:e9fe3186670c default tip

letzter Stand eingecheckt
author Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
date Tue, 21 May 2013 10:19:32 +0200
parents
children
line wrap: on
line source

package de.mpg.mpiwg.berlin.mpdl.cms.scheduler;

import java.util.Date;

import java.util.logging.Logger;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

import de.mpg.mpiwg.berlin.mpdl.cms.document.DocumentHandler;
import de.mpg.mpiwg.berlin.mpdl.exception.ApplicationException;

public class CmsDocJob implements Job {
  public static String STATUS_BEGIN = "started";
  private static Logger LOGGER = Logger.getLogger(CmsDocJob.class.getName());
  private JobExecutionContext currentExecutedContext;
  
  public void execute(JobExecutionContext context) throws JobExecutionException {
    this.currentExecutedContext = context;
    CmsDocOperation docOperation = getDocOperation();
    try {
      docOperation.setStatus(STATUS_BEGIN);
      String operationName = docOperation.getName();   
      if (operationName.equals("create")) {
        DocumentHandler docHandler = new DocumentHandler();
        docHandler.doOperation(docOperation);
      } else if (operationName.equals("delete")) {
        DocumentHandler docHandler = new DocumentHandler();
        docHandler.doOperation(docOperation);
      } else if (operationName.equals("importDirectory")) {
        DocumentHandler docHandler = new DocumentHandler();
        docHandler.doOperation(docOperation);
      }
      Date startingTime = docOperation.getStart();
      String jobInfo = "Document operation " + docOperation.toString() + ": started at: " + startingTime;
      LOGGER.info(jobInfo);
      this.currentExecutedContext = null;
    } catch (Exception e) {
      try {
        // Quartz will automatically unschedule all triggers associated with this job so that it does not run again
        CmsChainScheduler mpdlChainScheduler = CmsChainScheduler.getInstance();
        mpdlChainScheduler.finishOperation(docOperation);
        String errorMessage = e.getMessage();
        if (errorMessage == null) {
          Throwable t = e.getCause();
          if (t == null) {
            errorMessage = e.toString();
          } else {
            errorMessage = t.getMessage();
          }
        }
        docOperation.setErrorMessage(errorMessage);
        LOGGER.severe(errorMessage);
        JobExecutionException jobExecutionException = new JobExecutionException(e);
        jobExecutionException.setUnscheduleAllTriggers(true);
        throw jobExecutionException;
      } catch (ApplicationException ex) {
        // nothing
      }
    }
  } 

  private CmsDocOperation getDocOperation() {
    CmsDocOperation docOperation = null;
    if (currentExecutedContext != null) {
      JobDetail job = currentExecutedContext.getJobDetail();
      JobDataMap parameters = job.getJobDataMap();
      docOperation = (CmsDocOperation) parameters.get("operation");
    }
    return docOperation;
  }

}