/*
  * (non-Javadoc)
  *
  * @see
  * org.opengeoportal.harvester.api.service.IngestService#saveAndSchedule
  * (org.opengeoportal.harvester.api.domain.Ingest, java.lang.Long,
  * org.opengeoportal.harvester.api.domain.InstanceType)
  */
 @Override
 @Transactional
 public Ingest saveAndSchedule(
     Ingest ingest, Long customRepositoryId, InstanceType typeOfInstance) {
   ingest.setScheduled(true);
   Ingest savedIngest = save(ingest, customRepositoryId, typeOfInstance);
   scheduler.scheduleIngest(savedIngest);
   return savedIngest;
 }
  /*
   * (non-Javadoc)
   *
   * @see
   * org.opengeoportal.harvester.api.service.IngestService#saveAndSchedule
   * (org.opengeoportal.harvester.api.domain.Ingest)
   */
  @Override
  @Transactional
  public Ingest saveAndSchedule(Ingest ingest) {
    ingest.setScheduled(true);
    Ingest savedIngest;
    if (ingest instanceof IngestOGP) {
      savedIngest = saveAndUpdateServerQuery(ingest);
    } else {
      savedIngest = save(ingest);
    }

    scheduler.scheduleIngest(savedIngest);
    return savedIngest;
  }
  /*
   * (non-Javadoc)
   *
   * @see
   * org.opengeoportal.harvester.api.service.IngestService#unscheduleByRepository
   * (Long repositoryId)
   */
  @Override
  @Transactional
  public int unscheduleByRepository(Long repositoryId) {
    List<Ingest> scheduledIngests =
        ingestRepository.findByRepositoryIdAndScheduledTrue(repositoryId);
    for (Ingest ingest : scheduledIngests) {
      try {
        scheduler.unschedule(ingest);
      } catch (SchedulerException e) {
        if (logger.isWarnEnabled()) {
          logger.warn("Cannot unschedule ingest with id " + ingest.getId(), e);
        }
      }
    }

    return ingestRepository.setScheduledForRepositoryId(repositoryId);
  }
 @Override
 @Transactional
 public boolean interruptIngest(Long id) {
   if (logger.isInfoEnabled()) {
     logger.info("Interrupting ingest with id " + id);
   }
   boolean interrupted = true;
   Ingest ingest = findById(id);
   if (ingest != null) {
     try {
       interrupted = scheduler.interrupt(ingest);
     } catch (SchedulerException se) {
       if (logger.isErrorEnabled()) {
         logger.error("Cannot interrupt inget id = " + id);
       }
     }
   }
   return interrupted;
 }
 /*
  * (non-Javadoc)
  *
  * @see
  * org.opengeoportal.harvester.api.service.IngestService#unscheduleIngest
  * (java.lang.Long)
  */
 @Override
 @Transactional
 public boolean unscheduleIngest(Long id) {
   boolean unscheduled = false;
   Ingest ingest = findById(id);
   if (ingest != null) {
     try {
       unscheduled = scheduler.unschedule(ingest);
       ingest.setScheduled(false);
       ingest = save(ingest);
       unscheduled = true;
     } catch (SchedulerException e) {
       if (logger.isErrorEnabled()) {
         logger.error("Cannot unschedule ingest id = " + ingest.getId());
       }
     }
   } else {
     unscheduled = true;
   }
   return unscheduled;
 }
 /*
  * (non-Javadoc)
  *
  * @see org.opengeoportal.harvester.api.service.IngestService#
  * getCurrentlyExecutingJobs()
  */
 @Override
 @Transactional
 public SortedSet<Long> getCurrentlyExecutingJobs() {
   return scheduler.getCurrentlyExecutingJobs();
 }
 /*
  * (non-Javadoc)
  *
  * @see
  * org.opengeoportal.harvester.api.service.IngestService#getNextRun(org.
  * opengeoportal.harvester.api.domain.Ingest)
  */
 @Override
 @Transactional
 public Date getNextRun(Ingest ingest) {
   Date nextRun = scheduler.getNextRun(ingest);
   return nextRun;
 }