blob: d2ae0f1601146b9ab5ff91af744af596b502b0d4 [file] [log] [blame]
package org.apache.airavata.k8s.api.server.service.task.type;
import org.apache.airavata.k8s.api.resources.task.type.TaskTypeResource;
import org.apache.airavata.k8s.api.server.model.task.type.TaskInputType;
import org.apache.airavata.k8s.api.server.model.task.type.TaskModelType;
import org.apache.airavata.k8s.api.server.model.task.type.TaskOutPortType;
import org.apache.airavata.k8s.api.server.model.task.type.TaskOutputType;
import org.apache.airavata.k8s.api.server.repository.task.type.TaskInputTypeRepository;
import org.apache.airavata.k8s.api.server.repository.task.type.TaskOutPortTypeRepository;
import org.apache.airavata.k8s.api.server.repository.task.type.TaskOutputTypeRepository;
import org.apache.airavata.k8s.api.server.repository.task.type.TaskTypeRepository;
import org.apache.airavata.k8s.api.server.service.util.ToResourceUtil;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
/**
* TODO: Class level comments please
*
* @author dimuthu
* @since 1.0.0-SNAPSHOT
*/
@Service
public class TaskTypeService {
private TaskTypeRepository taskTypeRepository;
private TaskInputTypeRepository taskInputTypeRepository;
private TaskOutputTypeRepository taskOutputTypeRepository;
private TaskOutPortTypeRepository taskOutPortTypeRepository;
public TaskTypeService(TaskTypeRepository taskTypeRepository,
TaskInputTypeRepository taskInputTypeRepository,
TaskOutputTypeRepository taskOutputTypeRepository,
TaskOutPortTypeRepository taskOutPortTypeRepository) {
this.taskTypeRepository = taskTypeRepository;
this.taskInputTypeRepository = taskInputTypeRepository;
this.taskOutputTypeRepository = taskOutputTypeRepository;
this.taskOutPortTypeRepository = taskOutPortTypeRepository;
}
public long create(TaskTypeResource resource) {
Optional<TaskModelType> taskType = taskTypeRepository.findByName(resource.getName());
if (taskType.isPresent()) {
return taskType.get().getId();
}
TaskModelType taskModelType = new TaskModelType();
taskModelType.setName(resource.getName());
taskModelType.setTopicName(resource.getTopicName());
taskModelType.setIcon(resource.getIcon());
TaskModelType savedTaskType = taskTypeRepository.save(taskModelType);
Optional.ofNullable(resource.getInputTypes()).ifPresent(inputs -> inputs.forEach(input -> {
TaskInputType inputType = new TaskInputType();
inputType.setName(input.getName());
inputType.setType(input.getType());
inputType.setDefaultValue(input.getDefaultValue());
inputType.setTaskModelType(savedTaskType);
taskInputTypeRepository.save(inputType);
}));
Optional.ofNullable(resource.getOutputTypes()).ifPresent(outputs -> outputs.forEach(output -> {
TaskOutputType outputType = new TaskOutputType();
outputType.setName(output.getName());
outputType.setType(output.getType());
outputType.setTaskModelType(savedTaskType);
taskOutputTypeRepository.save(outputType);
}));
Optional.ofNullable(resource.getOutPorts()).ifPresent(outPorts -> outPorts.forEach(outPort -> {
TaskOutPortType outPortType = new TaskOutPortType();
outPortType.setName(outPort.getName());
outPortType.setOrder(outPort.getOrder());
outPortType.setTaskModelType(savedTaskType);
taskOutPortTypeRepository.save(outPortType);
}));
return savedTaskType.getId();
}
public List<TaskTypeResource> getAll() {
List<TaskTypeResource> types = new ArrayList<>();
Optional.ofNullable(taskTypeRepository.findAll())
.ifPresent(taskModelTypes -> taskModelTypes.forEach(taskModelType -> {
types.add(ToResourceUtil.toResource(taskModelType).get());
}));
return types;
}
}