Skip to content
Snippets Groups Projects
Select Git revision
  • bfd40f6f02413abff21975f6408cfde28b76e909
  • master default
2 results

Application.java

Blame
  • Forked from cosc360-2016 / project-base
    Source project has a limited visibility.
    Application.java 1.74 KiB
    package controllers;
    
    import actors.Setup;
    import com.google.inject.Inject;
    import com.google.inject.Singleton;
    import play.mvc.Controller;
    import play.mvc.Result;
    import scala.compat.java8.FutureConverters;
    import play.libs.ws.*;
    
    import java.util.concurrent.CompletionStage;
    import static akka.pattern.Patterns.ask;
    
    @Singleton
    public class Application extends Controller {
    
        Setup actorSetup;
    
        WSClient wsClient;
    
        @Inject
        public Application(Setup actorSetup, WSClient wsClient) {
            this.actorSetup = actorSetup;
            this.wsClient = wsClient;
        }
    
        /**
         * Play framework suppors asynchronous controller methods -- that is, methods that instead of returning a Result
         * return a CompletionStage, which will produce a Result some time in the future
         */
        public CompletionStage<Result> index() {
            /*
             * This code might look a little complex.
             *
             * ask sends a message to an ActorRef, and then returns a Future that will eventually contain the response.
             * But Future is a Scala class, so FutureConverters.toJava converts it into a CompletionStage, which is Java's equivalent.
             * thenApply is a method on CompletionStage that means "when you get the result, do this with it, and return a new CompletionStage"
             */
            return FutureConverters.toJava(ask(actorSetup.marshallActor, "Report!", 1000))
                    .thenApply(response -> ok(response.toString()));
        }
    
        /**
         * This controller method uses Play's Web Service client to make another HTTP call, and do something with the
         * response
         */
        public CompletionStage<Result> whatDidGitLabSay() {
            return wsClient.url("http://www.une.edu.au/foo").get().thenApply(r -> ok(r.getStatusText()));
        }
    }