private Future<Recommendation> getDestinationWithReccomendation(Destination destination) { ActorRef pricingActor = SpringAppContext.actorSystem().actorOf(Props.create(PriceCalculationActor.class)); ActorRef foreCastActor = SpringAppContext.actorSystem().actorOf(Props.create(WeatherForecastActor.class)); final Future<Calculation> calculationFuture = toPrice( Patterns.ask( pricingActor, new PriceRequest("moon", destination.getDestination()), new Timeout(Duration.create(5, TimeUnit.SECONDS)))); final Future<Forecast> forecastFuture = toForecast( Patterns.ask( foreCastActor, new WeatherRequest(destination.getDestination()), new Timeout(Duration.create(5, TimeUnit.SECONDS)))); return calculationFuture .zip(forecastFuture) .map( new Mapper<Tuple2<Calculation, Forecast>, Recommendation>() { @Override public Recommendation apply(Tuple2<Calculation, Forecast> tuple) { return new Recommendation( destination.getDestination(), tuple._2().getForecast(), tuple._1().getPrice()); } }, SpringAppContext.actorSystem().dispatcher()); }
@Override public int hashCode() { return name.hashCode() + destination.getDestination().hashCode() + address.hashCode(); }