
package de.ivu.elect.exchange.wahl;

import java.util.concurrent.atomic.AtomicLong;

import javax.ejb.Asynchronous;
import javax.ejb.DependsOn;
import javax.ejb.Singleton;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.inject.Inject;

import de.ivu.elect.jee.background.AbstractBackgroundService;

/*
 * CRON-TASK - Nicht als Vorlage für andere Background Services nehmen
 */
@Singleton
@DependsOn("StartupSingleton")
// https://issues.jboss.org/browse/EJBTHREE-2070 (keine Transaktion)
@TransactionManagement(TransactionManagementType.BEAN)
public class SystemWahlterminExportBackgroundService extends AbstractBackgroundService {

  public static final AtomicLong RUNNING = createRunning();

  @Inject
  private transient SystemWahlterminExport systemWahlterminExport;

  private static volatile boolean disabled = false;

  public SystemWahlterminExportBackgroundService() {
    super();
  }

  // statisch, da @Singleton
  public static void setDisabled(boolean disabled) {
    SystemWahlterminExportBackgroundService.disabled = disabled;
  }

  @Override
  public AtomicLong getRunning() {
    return RUNNING;
  }

  @Override
  @Asynchronous
  public void run() {
    try {
      // nur einmal ausführen, nicht prüfen, ob etwas zu tun ist...
      doSomething();
    } finally {
      getRunning().set(RUNNING_INITIAL);
    }
  }

  @Override
  protected boolean isSomethingToDo() {
    return !disabled;
  }

  @Override
  protected void doSomething() {
    if (!disabled) {
      systemWahlterminExport.exportiere();
    }
  }

  @Override
  protected boolean isDisabled() {
    return disabled;
  }
}
