/** @return */
  private int GetMinRemainingRuntime() {
    final String methodName = "GetMinRemainingRuntime";
    Logfile.WriteCalled(logLevel, STR_ClassName, methodName);

    int minRemainingRuntime = Integer.MAX_VALUE;

    try {
      if (this.labExperimentEngines == null) {
        throw new NullPointerException(STRERR_LabExperimentEngines);
      }

      /*
       * Get the remaining runtime for each experiment engine
       */
      for (int unitId = 0; unitId < this.labManagement.getFarmSize(); unitId++) {
        /*
         * Get the experiment engine
         */
        LabExperimentEngine labExperimentEngine = this.labExperimentEngines[unitId];
        if (labExperimentEngine == null) {
          throw new NullPointerException(
              String.format(STRERR_LabExperimentEngineUnitId_arg, unitId));
        }

        /*
         * Check to see if the experiment engine is online
         */
        LabStatus labStatus = labExperimentEngine.GetLabStatus();
        if (labStatus.isOnline() == true) {
          /*
           * Get the remaining runtime for this engine and check if this is a smaller value
           */
          int remainingRuntime = labExperimentEngine.GetRemainingRuntime();
          if (remainingRuntime < minRemainingRuntime) {
            minRemainingRuntime = remainingRuntime;
          }
        }
      }
    } catch (Exception ex) {
      Logfile.WriteError(ex.toString());
    }

    Logfile.WriteCompleted(logLevel, STR_ClassName, methodName);

    return minRemainingRuntime;
  }