/**
  * Starts the example execution, calling the class constructor\ to build and run the simulation.
  *
  * @param args command line parameters
  */
 public static void main(String[] args) {
   Log.printFormattedLine("Starting %s ...", VmListenersExample2.class.getSimpleName());
   try {
     new VmListenersExample2();
     Log.printFormattedLine("%s finished!", VmListenersExample2.class.getSimpleName());
   } catch (Exception e) {
     Log.printFormattedLine("Simulation finished due to unexpected error: %s", e);
   }
 }
  /**
   * Creates all VM listeners to be used by every VM created.
   *
   * @see #createVm(int)
   */
  private void createVmListeners() {
    /*
    Creates the listener object that will be notified when a host is allocated to a VM.
    All VMs will use this same listener.
    The Listener is created using Java 8 Lambda Expressions.
    */
    this.onHostAllocationListener =
        eventInfo ->
            Log.printFormattedLine(
                "\t#EventListener: Host %d allocated to Vm %d at time %.2f",
                eventInfo.getHost().getId(), eventInfo.getVm().getId(), eventInfo.getTime());

    /*
    Creates the listener object that will be notified when a host is deallocated for a VM.
    All VMs will use this same listener.
    The Listener is created using Java 8 Lambda Expressions.
    */
    this.onHostDeallocationListener =
        evt ->
            Log.printFormattedLine(
                "\t#EventListener: Vm %d moved/removed from Host %d at time %.2f",
                evt.getVm().getId(), evt.getHost().getId(), evt.getTime());
  }