/*
* ProActive Parallel Suite(TM):
* The Open Source library for parallel and distributed
* Workflows & Scheduling, Orchestration, Cloud Automation
* and Big Data Analysis on Enterprise Grids & Clouds.
*
* Copyright (c) 2007 - 2017 ActiveEon
* Contact: contact@activeeon.com
*
* This library is free software: you can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation: version 3 of
* the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* If needed, contact us to obtain a release under GPL Version 2 or 3
* or a different license than the AGPL.
*/
package org.ow2.proactive.scheduler.rest.data;
import static org.ow2.proactive.scheduler.task.TaskIdImpl.createTaskId;
import java.util.ArrayList;
import java.util.List;
import org.ow2.proactive.scheduler.common.job.JobId;
import org.ow2.proactive.scheduler.common.job.JobInfo;
import org.ow2.proactive.scheduler.common.job.JobPriority;
import org.ow2.proactive.scheduler.common.job.JobResult;
import org.ow2.proactive.scheduler.common.job.JobState;
import org.ow2.proactive.scheduler.common.job.JobStatus;
import org.ow2.proactive.scheduler.common.task.TaskId;
import org.ow2.proactive.scheduler.common.task.TaskInfo;
import org.ow2.proactive.scheduler.common.task.TaskResult;
import org.ow2.proactive.scheduler.common.task.TaskState;
import org.ow2.proactive.scheduler.common.task.TaskStatus;
import org.ow2.proactive.scheduler.common.usage.JobUsage;
import org.ow2.proactive.scheduler.common.usage.TaskUsage;
import org.ow2.proactive.scheduler.job.JobIdImpl;
import org.ow2.proactive.scheduler.job.SchedulerUserInfo;
import org.ow2.proactive_grid_cloud_portal.scheduler.dto.*;
public class DataUtility {
private DataUtility() {
}
public static JobId jobId(JobIdData jobIdData) {
return new JobIdImpl(jobIdData.getId(), jobIdData.getReadableName());
}
public static JobPriority jobPriority(JobPriorityData d) {
return JobPriority.valueOf(d.name());
}
public static JobStatus jobStatus(JobStatusData d) {
return JobStatus.valueOf(d.name());
}
public static JobInfo toJobInfo(JobInfoData d) {
JobInfoImpl impl = new JobInfoImpl();
impl.setJobId(jobId(d.getJobId()));
impl.setFinishedTime(d.getFinishedTime());
impl.setJobOwner(d.getJobOwner());
impl.setNumberOfFinishedTasks(d.getNumberOfFinishedTasks());
impl.setNumberOfPendingTasks(d.getNumberOfPendingTasks());
impl.setNumberOfRunningTasks(d.getNumberOfRunningTasks());
impl.setNumberOfFailedTasks(d.getNumberOfFailedTasks());
impl.setNumberOfFaultyTasks(d.getNumberOfFaultyTasks());
impl.setNumberOfInErrorTasks(d.getNumberOfInErrorTasks());
impl.setJobPriority(jobPriority(d.getPriority()));
impl.setRemovedTime(d.getRemovedTime());
impl.setStartTime(d.getStartTime());
impl.setInErrorTime(d.getInErrorTime());
impl.setJobStatus(jobStatus(d.getStatus()));
impl.setSubmittedTime(d.getSubmittedTime());
impl.setTotalNumberOfTasks(d.getTotalNumberOfTasks());
impl.setGenericInformation(d.getGenericInformation());
impl.setVariables(d.getVariables());
return impl;
}
public static TaskInfo taskInfo(TaskInfoData d) {
TaskInfoImpl impl = new TaskInfoImpl();
JobIdData jobIdData = d.getJobId();
if (jobIdData != null) {
JobId jobId = jobId(jobIdData);
impl.setJobId(jobId);
TaskId taskId = taskId(jobId, d.getTaskId());
impl.setTaskId(taskId);
}
impl.setExecutionDuration(d.getExecutionDuration());
impl.setExecutionHostName(d.getExecutionHostName());
impl.setInErrorTime(d.getInErrorTime());
impl.setFinishedTime(d.getFinishedTime());
impl.setNumberOfExecutionLeft(d.getNumberOfExecutionLeft());
impl.setNumberOfExecutionOnFailureLeft(d.getNumberOfExecutionOnFailureLeft());
impl.setStartTime(d.getStartTime());
impl.setStatus(TaskStatus.valueOf(d.getTaskStatus().name()));
impl.setName(d.getTaskId().getReadableName());
impl.setProgress(d.getProgress());
return impl;
}
public static TaskState taskState(TaskStateData d) {
return new TaskStateImpl(d);
}
public static TaskResult toTaskResult(JobId jobId, TaskResultData d) {
return new TaskResultImpl(taskId(jobId, d.getId()), d);
}
public static TaskLogsImpl toTaskLogs(String all, String out, String err) {
return new TaskLogsImpl(out, err, all);
}
public static JobState toJobState(JobStateData d) {
return new JobStateImpl(d);
}
public static JobResult toJobResult(JobResultData d) {
return new JobResultImpl(d);
}
public static List<JobUsage> toJobUsages(List<JobUsageData> dataList) {
List<JobUsage> jobUsages = new ArrayList<>(dataList.size());
for (JobUsageData d : dataList) {
jobUsages.add(jobUsage(d));
}
return jobUsages;
}
public static JobUsage jobUsage(JobUsageData d) {
JobUsage impl = new JobUsage(d.getOwner(), d.getProject(), d.getJobId(), d.getJobName(), d.getJobDuration());
List<TaskUsageData> taskUsageDataList = d.getTaskUsages();
for (TaskUsageData taskUsageData : taskUsageDataList) {
impl.add(taskUsage(taskUsageData));
}
return impl;
}
public static TaskUsage taskUsage(TaskUsageData d) {
return new TaskUsage(d.getTaskId(),
d.getTaskName(),
d.getTaskStartTime(),
d.getTaskFinishedTime(),
d.getTaskExecutionDuration(),
d.getTaskNodeNumber());
}
public static List<JobInfo> toJobInfos(List<UserJobData> dataList) {
List<JobInfo> jobInfos = new ArrayList<>(dataList.size());
for (UserJobData ujd : dataList) {
jobInfos.add(toJobInfo(ujd.getJobInfo()));
}
return jobInfos;
}
public static List<SchedulerUserInfo> toSchedulerUserInfos(List<SchedulerUserData> dataList) {
List<SchedulerUserInfo> schedulerUserInfos = new ArrayList<>(dataList.size());
for (SchedulerUserData sud : dataList) {
schedulerUserInfos.add(new SchedulerUserInfo(sud.getHostName(),
sud.getUsername(),
sud.getConnectionTime(),
sud.getLastSubmitTime(),
sud.getSubmitNumber()));
}
return schedulerUserInfos;
}
public static TaskId taskId(JobId jobId, TaskIdData taskIdData) {
return createTaskId(jobId, taskIdData.getReadableName(), taskIdData.getId());
}
}