package org.jboss.resteasy.test.cdi.basic.resource;

import javax.ejb.Asynchronous;
import javax.ejb.Stateless;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.container.AsyncResponse;
import javax.ws.rs.container.Suspended;
import javax.ws.rs.core.Response;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.logging.Logger;

@Stateless
@Path("/")
public class AsynchronousResource {
   @Inject
   private Logger log;

   @Inject
   private AsynchronousStatelessLocal stateless;

   public static final Long DELAY = 5000L;

   @GET
   @Path("asynch/simple")
   public Response asynchSimple() throws ExecutionException, InterruptedException {
      log.info("entering asynch()");
      Future<Boolean> asyncResult = stateless.asynch();
      return asyncResult.get() ? Response.ok().build() : Response.serverError().build();
   }

   @Asynchronous
   @GET
   @Path("asynch/ejb")
   public void asynchEJB(@Suspended final AsyncResponse asyncResponse) throws ExecutionException, InterruptedException {
      log.info("entering asynchEJB()");
      Thread.sleep(DELAY);
      asyncResponse.resume(Response.ok().build());
   }
}
