package org.jboss.resteasy.test.asynch.resource;

import java.util.concurrent.TimeUnit;

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 org.jboss.logging.Logger;

@Path("/")
public class AsyncPostProcessingResource {

    private static Logger logger = Logger.getLogger(AsyncPostProcessingResource.class);

    @GET
    @Path("sync")
    public Response sync() {
        return Response.ok().entity("sync").build();
    }

    @GET
    @Path("async/delay")
    public void asyncDelay(@Suspended final AsyncResponse response) throws Exception {
        response.setTimeout(10000, TimeUnit.MILLISECONDS);
        Thread t = new Thread() {
            @Override
            public void run() {
                try {
                    Thread.sleep(5000);
                    Response jaxrs = Response.ok("async/delay").build();
                    response.resume(jaxrs);
                } catch (Exception e) {
                    logger.info("Error: " + e.getStackTrace());
                }
            }
        };
        t.start();
    }

    @GET
    @Path("async/nodelay")
    public void asyncNoDelay(@Suspended final AsyncResponse response) throws Exception {
        response.setTimeout(10000, TimeUnit.MILLISECONDS);
        Response jaxrs = Response.ok("async/nodelay").build();
        response.resume(jaxrs);
    }

}
