package com.airlock.iam.servicecontainer.app.application.configuration;

import com.airlock.iam.servicecontainer.api.domain.model.task.Task;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.List;
import java.util.concurrent.locks.Lock;

final class SequentialTask implements Task {
   private final Task task;
   private final Lock lock;

   @Override
   public int getProgressPercentage() {
      return this.task.getProgressPercentage();
   }

   @Override
   public List<Task.ExecutionResult> getLastExecutions() {
      return this.task.getLastExecutions();
   }

   @Override
   public void executeTask() {
      try {
         this.lock.lock();
         this.task.executeTask();
      } finally {
         this.lock.unlock();
      }
   }

   @Override
   public String getThreadName() {
      return this.task.getThreadName();
   }

   @Override
   public void pleaseStop() {
      this.task.pleaseStop();
   }

   @Override
   public boolean isRunning() {
      return this.task.isRunning();
   }

   @SuppressFBWarnings(justification = "generated code")
   public SequentialTask(Task task, Lock lock) {
      this.task = task;
      this.lock = lock;
   }
}
