public static function get_experiment_values($experiment, $project, $forSearch = false)
 {
     $expVal = array();
     //$expVal["experimentStatusString"] = "";
     $expVal["experimentTimeOfStateChange"] = "";
     $expVal["experimentCreationTime"] = "";
     $expVal["experimentStates"] = ExperimentState::$__names;
     $expVal["processStates"] = ProcessState::$__names;
     $expVal["jobStates"] = JobState::$__names;
     $expVal["taskStates"] = TaskState::$__names;
     $expVal["taskTypes"] = TaskTypes::$__names;
     $experimentStatusString = $expVal["experimentStates"][$experiment->experimentStatus->state];
     $expVal["experimentStatusString"] = $experimentStatusString;
     if ($experimentStatusString == ExperimentState::FAILED) {
         $expVal["editable"] = false;
     }
     $expVal["cancelable"] = false;
     if ($experimentStatusString == ExperimentState::LAUNCHED || $experimentStatusString == ExperimentState::EXECUTING) {
         $expVal["cancelable"] = true;
     }
     if ($experiment->experimentStatus != null) {
         $experimentStatus = $experiment->experimentStatus;
         /*
         $experimentState = $experimentStatus->state;
         $experimentStatusString = ExperimentState::$__names[$experimentState];
         $expVal["experimentStatusString"] = $experimentStatusString;
         */
         $expVal["experimentTimeOfStateChange"] = $experimentStatus->timeOfStateChange / 1000;
         // divide by 1000 since timeOfStateChange is in ms
         $expVal["experimentCreationTime"] = $experiment->creationTime / 1000;
         // divide by 1000 since creationTime is in ms
     }
     if (!$forSearch) {
         $userConfigData = $experiment->userConfigurationData;
         $scheduling = $userConfigData->computationalResourceScheduling;
         $expVal['scheduling'] = $scheduling;
         try {
             $expVal["computeResource"] = CRUtilities::get_compute_resource($scheduling->resourceHostId);
         } catch (Exception $ex) {
             //Error while retrieving CR
             $expVal["computeResource"] = "";
         }
     }
     try {
         $expVal["applicationInterface"] = AppUtilities::get_application_interface($experiment->executionId);
     } catch (Exception $ex) {
         //Failed retrieving Application Interface (May be it's deleted) Fix for Airavata-1801
         $expVal["applicationInterface"] = new ApplicationInterfaceDescription();
         $expVal["applicationInterface"]->applicationName = substr($experiment->executionId, -8);
     }
     switch (ExperimentState::$__names[$experiment->experimentStatus->state]) {
         case 'CREATED':
         case 'VALIDATED':
         case 'SCHEDULED':
         case 'FAILED':
             $expVal["editable"] = true;
             break;
         default:
             $expVal["editable"] = false;
             break;
     }
     switch (ExperimentState::$__names[$experiment->experimentStatus->state]) {
         case 'VALIDATED':
         case 'SCHEDULED':
         case 'LAUNCHED':
         case 'EXECUTING':
             $expVal["cancelable"] = true;
             break;
         default:
             $expVal["cancelable"] = false;
             break;
     }
     return $expVal;
 }
echo '</div>';
$experiments = ProjectUtilities::get_experiments_in_project($project->projectID);
echo '<div class="table-responsive">';
echo '<table class="table">';
echo '<tr>';
echo '<th>Name</th>';
echo '<th>Application</th>';
echo '<th>Compute Resource</th>';
echo '<th>Last Modified Time</th>';
echo '<th>Experiment Status</th>';
echo '<th>Job Status</th>';
echo '</tr>';
foreach ($experiments as $experiment) {
    $expValues = ExperimentUtilities::get_experiment_values($experiment, ProjectUtilities::get_project($experiment->projectId), true);
    $expValues["jobState"] = ExperimentUtilities::get_job_status($experiment);
    $applicationInterface = AppUtilities::get_application_interface($experiment->executionId);
    echo '<tr>';
    echo '<td>' . $experiment->experimentName . '</td>';
    echo "<td>{$applicationInterface->applicationName}</td>";
    echo '<td>';
    try {
        $cr = CRUtilities::get_compute_resource($experiment->userConfigurationData->computationalResourceScheduling->resourceHostId);
        if (!empty($cr)) {
            echo $cr->hostName;
        }
    } catch (Exception $ex) {
        //Error while retrieving the CR
    }
    echo '</td>';
    echo '<td class="time" unix-time="' . $expValues["experimentTimeOfStateChange"] . '"></td>';
    echo '<td>';
    public static function get_experiment_values($experiment, $project, $forSearch = false)
    {
        //var_dump( $experiment); exit;
        $expVal = array();
        $expVal["experimentStatusString"] = "";
        $expVal["experimentTimeOfStateChange"] = "";
        $expVal["experimentCreationTime"] = "";

        if ($experiment->experimentStatus != null) {
            $experimentStatus = $experiment->experimentStatus;
            $experimentState = $experimentStatus->state;
            $experimentStatusString = ExperimentState::$__names[$experimentState];
            $expVal["experimentStatusString"] = $experimentStatusString;
            $expVal["experimentTimeOfStateChange"] = $experimentStatus->timeOfStateChange / 1000; // divide by 1000 since timeOfStateChange is in ms
            $expVal["experimentCreationTime"] = $experiment->creationTime / 1000; // divide by 1000 since creationTime is in ms
        }

        if (!$forSearch) {
            $userConfigData = $experiment->userConfigurationData;
            $scheduling = $userConfigData->computationalResourceScheduling;
            $expVal['scheduling'] = $scheduling;
            try {
                $expVal["computeResource"] = CRUtilities::get_compute_resource($scheduling->resourceHostId);
            } catch (Exception $ex) {
                //Error while retrieving CR
                $expVal["computeResource"] = "";
            }
        }
        $expVal["applicationInterface"] = AppUtilities::get_application_interface($experiment->executionId);


        switch ($experimentStatusString) {
            case 'CREATED':
            case 'VALIDATED':
            case 'SCHEDULED':
            case 'FAILED':
                $expVal["editable"] = true;
                break;
            default:
                $expVal["editable"] = false;
                break;
        }

        switch ($experimentStatusString) {
            case 'CREATED':
            case 'VALIDATED':
            case 'SCHEDULED':
            case 'LAUNCHED':
            case 'EXECUTING':
                $expVal["cancelable"] = true;
                break;
            default:
                $expVal["cancelable"] = false;
                break;
        }

        return $expVal;

    }