blob: d2b93aa39e94939b61d8a131f57e9023c1774f7f [file] [log] [blame]
/**
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.airavata.k8s.api.server.service;
import org.apache.airavata.k8s.api.resources.process.ProcessStatusResource;
import org.apache.airavata.k8s.api.server.ServerRuntimeException;
import org.apache.airavata.k8s.api.server.model.process.ProcessModel;
import org.apache.airavata.k8s.api.server.model.process.ProcessStatus;
import org.apache.airavata.k8s.api.server.model.task.TaskModel;
import org.apache.airavata.k8s.api.server.repository.process.ProcessRepository;
import org.apache.airavata.k8s.api.resources.process.ProcessResource;
import org.apache.airavata.k8s.api.server.repository.process.ProcessStatusRepository;
import org.apache.airavata.k8s.api.server.service.task.TaskService;
import org.apache.airavata.k8s.api.server.service.util.ToResourceUtil;
import org.springframework.stereotype.Service;
import java.util.Optional;
/**
* TODO: Class level comments please
*
* @author dimuthu
* @since 1.0.0-SNAPSHOT
*/
@Service
public class ProcessService {
private ProcessRepository processRepository;
private ProcessStatusRepository processStatusRepository;
private ExperimentService experimentService;
private TaskService taskService;
private WorkflowService workflowService;
public ProcessService(ProcessRepository processRepository,
ProcessStatusRepository processStatusRepository,
ExperimentService experimentService,
TaskService taskService) {
this.processRepository = processRepository;
this.processStatusRepository = processStatusRepository;
this.experimentService = experimentService;
this.taskService = taskService;
}
public long create(ProcessResource resource) {
ProcessModel processModel = new ProcessModel();
processModel.setId(resource.getId());
processModel.setCreationTime(resource.getCreationTime());
processModel.setLastUpdateTime(resource.getLastUpdateTime());
processModel.setName(resource.getName());
processModel.setProcessType(ProcessModel.ProcessType.valueOf(resource.getProcessType()));
if (resource.getExperimentId() != 0) {
processModel.setExperiment(experimentService.findEntityById(resource.getExperimentId())
.orElseThrow(() -> new ServerRuntimeException("Can not find experiment with id " +
resource.getExperimentId())));
}
if (resource.getWorkflowId() != 0) {
processModel.setWorkflow(workflowService.findEntityById(resource.getWorkflowId())
.orElseThrow(() -> new ServerRuntimeException("Can not find workflow with id " +
resource.getWorkflowId())));
}
processModel.setExperimentDataDir(resource.getExperimentDataDir());
ProcessModel saved = processRepository.save(processModel);
Optional.ofNullable(resource.getTasks()).ifPresent(taskResources -> taskResources.forEach(taskRes -> {
TaskModel taskModel = new TaskModel();
taskRes.setParentProcessId(saved.getId());
taskModel.setId(taskService.create(taskRes));
}));
return saved.getId();
}
public long addProcessStatus(long processId, ProcessStatusResource resource) {
ProcessModel processModel = processRepository.findById(processId)
.orElseThrow(() -> new ServerRuntimeException("Process with id " + processId + " can not be found"));
ProcessStatus status = new ProcessStatus();
status.setReason(resource.getReason());
status.setState(ProcessStatus.ProcessState.valueOf(resource.getState()));
status.setTimeOfStateChange(resource.getTimeOfStateChange());
status.setProcessModel(processModel);
ProcessStatus savedStatus = processStatusRepository.save(status);
return savedStatus.getId();
}
public Optional<ProcessResource> findById(long id) {
return ToResourceUtil.toResource(processRepository.findById(id).get());
}
}