/**
   * @param args
   * @throws Exception
   */
  public static void main(String[] args) throws Exception {
    ActorSystem system = ActorSystem.create("faultTolerance");

    LoggingAdapter log = Logging.getLogger(system, system);

    Integer originalValue = Integer.valueOf(0);

    ActorRef supervisor = system.actorOf(new Props(SupervisorActor.class), "supervisor");

    log.info("Sending value 8, no exceptions should be thrown! ");
    supervisor.tell(Integer.valueOf(8));

    Integer result =
        (Integer)
            Await.result(
                Patterns.ask(supervisor, new Result(), 5000),
                Duration.create(5000, TimeUnit.MILLISECONDS));

    log.info("Value Received-> {}", result);
    assert result.equals(Integer.valueOf(8));

    log.info(
        "Sending value -8, ArithmeticException should be thrown! Our Supervisor strategy says resume !");
    supervisor.tell(Integer.valueOf(-8));

    result =
        (Integer)
            Await.result(
                Patterns.ask(supervisor, new Result(), 5000),
                Duration.create(5000, TimeUnit.MILLISECONDS));

    log.info("Value Received-> {}", result);
    assert result.equals(Integer.valueOf(8));

    log.info(
        "Sending value null, NullPointerException should be thrown! Our Supervisor strategy says restart !");
    supervisor.tell(null);

    result =
        (Integer)
            Await.result(
                Patterns.ask(supervisor, new Result(), 5000),
                Duration.create(5000, TimeUnit.MILLISECONDS));

    log.info("Value Received-> {}", result);
    assert originalValue.equals(result);

    log.info(
        "Sending value \"String\", IllegalArgumentException should be thrown! Our Supervisor strategy says Stop !");

    supervisor.tell(String.valueOf("Do Something"));

    log.info("Worker Actor shutdown !");
    system.shutdown();
  }
  // #crTest
  @Test
  public void countVotesAsIntendedNotAsInFlorida() {
    ActorRef routedActor = system.actorOf(new Props().withRouter(new VoteCountRouter()));
    routedActor.tell(DemocratVote);
    routedActor.tell(DemocratVote);
    routedActor.tell(RepublicanVote);
    routedActor.tell(DemocratVote);
    routedActor.tell(RepublicanVote);
    Timeout timeout = new Timeout(Duration.parse("1 seconds"));
    Future<Object> democratsResult = routedActor.ask(DemocratCountResult, timeout);
    Future<Object> republicansResult = routedActor.ask(RepublicanCountResult, timeout);

    assertEquals(3, Await.result(democratsResult, timeout.duration()));
    assertEquals(2, Await.result(republicansResult, timeout.duration()));
  }
    @Override
    public void actionPerformed(ActionEvent arg0) {

      if (master == null) {
        JOptionPane.showMessageDialog(
            null,
            "Error, There is no master to perform the builds. Please configure"
                + " a remote or local master in the menu bar.");
        return;
      }

      BATCHECKOUT checkout =
          (BATCHECKOUT) view.selectedDatesTablePanel.m_combo_checkout.getSelectedItem();
      BATBUILD build = (BATBUILD) view.selectedDatesTablePanel.m_combo_build.getSelectedItem();
      BATDELETE delete = (BATDELETE) view.selectedDatesTablePanel.m_combo_delete.getSelectedItem();

      Timeout timeout = new Timeout(Duration.create(2, "seconds"));
      Future<Object> selectedDatesFuture =
          Patterns.ask(selectedActor, new RequestSelectedDatesMessage(), timeout);
      try {
        CurrentSelectedDatesResponse sdm =
            (CurrentSelectedDatesResponse) Await.result(selectedDatesFuture, timeout.duration());
        for (SelectedDate d : sdm.dates) {
          master.tell(
              new CheckoutBuildDeleteTask(master, d.getDate(), checkout, build, delete), self());
        }

        selectedActor.tell(new RemoveAllDates());
        updateAllGui(new ArrayList<SelectedDate>());
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
 @Test
 public void useWatch() {
   ActorSystem system = ActorSystem.create("MySystem");
   ActorRef myActor = system.actorOf(new Props(WatchActor.class));
   Future<Object> future = Patterns.ask(myActor, "kill", 1000);
   assert Await.result(future, Duration.parse("1 second")).equals("finished");
   system.shutdown();
 }
 private List<SelectedDate> getSelectedDates() {
   Timeout timeout = new Timeout(Duration.create(2, "seconds"));
   Future<Object> selectedDatesFuture =
       Patterns.ask(selectedActor, new RequestSelectedDatesMessage(), timeout);
   CurrentSelectedDatesResponse sdm;
   try {
     sdm = (CurrentSelectedDatesResponse) Await.result(selectedDatesFuture, timeout.duration());
     return sdm.dates;
   } catch (Exception e) {
     e.printStackTrace();
     return null;
   }
 }
  public static void main(String[] args) throws InterruptedException {

    ActorSystem app = ActorSystem.create("UntypedCoordinatedExample", AkkaSpec.testConf());

    ActorRef counter1 = app.actorOf(new Props().withCreator(UntypedCoordinatedCounter.class));
    ActorRef counter2 = app.actorOf(new Props().withCreator(UntypedCoordinatedCounter.class));

    counter1.tell(new Coordinated(new Increment(counter2)));

    Thread.sleep(3000);

    long timeout = 5000;
    Duration d = Duration.create(timeout, TimeUnit.MILLISECONDS);

    Future<Object> future1 = counter1.ask("GetCount", timeout);
    Future<Object> future2 = counter2.ask("GetCount", timeout);

    int count1 = (Integer) Await.result(future1, d);
    System.out.println("counter 1: " + count1);
    int count2 = (Integer) Await.result(future2, d);
    System.out.println("counter 1: " + count2);

    app.shutdown();
  }
  @Test
  public void usePatternsGracefulStop() {
    ActorSystem system = ActorSystem.create("MySystem");
    ActorRef actorRef = system.actorOf(new Props(MyUntypedActor.class));
    // #gracefulStop

    try {
      Future<Boolean> stopped =
          gracefulStop(actorRef, Duration.create(5, TimeUnit.SECONDS), system);
      Await.result(stopped, Duration.create(6, TimeUnit.SECONDS));
      // the actor has been stopped
    } catch (ActorTimeoutException e) {
      // the actor wasn't stopped within 5 seconds
    }
    // #gracefulStop
    system.shutdown();
  }
  @Test
  public void usingAsk() {
    ActorSystem system = ActorSystem.create("MySystem");
    ActorRef myActor =
        system.actorOf(
            new Props(
                new UntypedActorFactory() {
                  public UntypedActor create() {
                    return new MyAskActor();
                  }
                }),
            "myactor");

    // #using-ask
    Future<Object> future = Patterns.ask(myActor, "Hello", 1000);
    Object result = Await.result(future, Duration.create(1, TimeUnit.SECONDS));
    // #using-ask
    system.shutdown();
  }