private void tryAllocation() {

    hasNewAllocations = false;

    boolean b = true;
    while (b) {

      for (Participant p : Lists.newArrayList(remainingParticipants)) {

        System.out.println("check possibles timeboxes for student " + p.getStudent().getId());
        checkPossiblesTimeboxes(p, Lists.newArrayList(remainingTimeboxes), null);
      }

      if (hasNewAllocations) {
        System.out.println("try allocation : success");
      }

      b = hasNewAllocations;
      hasNewAllocations = false;
    }
  }
  private boolean allocateTimeBox(TimeBox timeBox, Participant participant) {

    if (!remainingTimeboxes.contains(timeBox)) {
      remainingTimeboxes.remove(timeBox);
      System.out.println("error, trying to allocate a timebox that is already allocated!");
      return false;
    }

    Integer a = allocationsPerTimebox.get(timeBox);
    if (a == null) a = 0;

    Room room = rooms.get(a);

    OralDefense oralDefense;

    try {

      oralDefense = OralDefenseFactory.createOralDefense(participant, room, timeBox);
      System.out.println("");
      System.out.println(
          "new oral defense created for student " + participant.getStudent().getId());

    } catch (IllegalArgumentException ex) {

      return false;
    }

    a++;
    allocationsPerTimebox.put(timeBox, a);

    if (a == rooms.size()) {
      remainingTimeboxes.remove(timeBox);
    }

    remainingParticipants.remove(participant);
    System.out.println("remaining students : " + remainingParticipants.size());
    System.out.println("");

    buffer.remove(participant);

    results.add(oralDefense);

    hasNewAllocations = true;

    return true;
  }