public void Close() { final String methodName = "Close"; Logfile.WriteCalled(logLevel, STR_ClassName, methodName); try { if (this.labExperimentEngines == null) { throw new NullPointerException(STRERR_LabExperimentEngines); } /* * Check each experiment engine to see if it is running an experiment */ 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)); } /* * Shutdown experiment engine */ labExperimentEngine.Close(); } } catch (Exception ex) { Logfile.WriteError(ex.toString()); } /* * Shutdown experiment manager */ if (this.running == true) { this.stopRunning = true; /* * Lab experiment manager thread may be waiting for an experiment submission signal */ this.labManagement.getSignalSubmitted().Notify(); /* * Wait for LabExperimentManager thread to terminate */ try { this.thread.join(); } catch (InterruptedException ex) { Logfile.WriteError(ex.toString()); } } Logfile.WriteCompleted(logLevel, STR_ClassName, methodName); }