package com.sungardas.enhancedsnapshots.dto.converter;
import com.sungardas.enhancedsnapshots.aws.dynamodb.model.TaskEntry;
import com.sungardas.enhancedsnapshots.dto.TaskDto;
import org.springframework.beans.BeanUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
import static com.sungardas.enhancedsnapshots.aws.dynamodb.model.TaskEntry.TaskEntryType.SYSTEM_BACKUP;
public class TaskDtoConverter {
public static TaskDto convert(TaskEntry task) {
TaskDto taskDto = new TaskDto();
BeanUtils.copyProperties(task, taskDto);
taskDto.setSchedulerTime(task.getSchedulerTime());
taskDto.setPriority(String.valueOf(task.getPriority()));
taskDto.setVolumes(Arrays.asList(task.getVolume()));
return taskDto;
}
public static List<TaskEntry> convert(TaskDto taskDto) {
List<TaskEntry> result = new ArrayList<>();
if(SYSTEM_BACKUP.getType().equals(taskDto.getType())){
TaskEntry task = copy(taskDto);
task.setVolume(SYSTEM_BACKUP.getType());
result.add(task);
} else {
for (String volumeId : taskDto.getVolumes()) {
TaskEntry task = copy(taskDto);
task.setVolume(volumeId);
result.add(task);
}
}
return result;
}
private static TaskEntry copy(TaskDto taskDto){
TaskEntry task = new TaskEntry();
BeanUtils.copyProperties(taskDto, task);
String options = new StringBuffer().
append(taskDto.getBackupFileName()).append(", ").append(taskDto.getZone()).toString();
task.setOptions(options);
switch (task.getType()) {
case "delete":
task.setPriority(1);
break;
default:
task.setPriority(0);
break;
}
return task;
}
public static List<TaskDto> convert(Iterable<TaskEntry> taskEntries) {
List<TaskDto> dtos = new ArrayList<>();
for (TaskEntry task : taskEntries) {
dtos.add(convert(task));
}
return dtos;
}
public static List<TaskDto> convert(Collection<TaskEntry>... taskEntries) {
return Arrays.stream(taskEntries).flatMap(s -> s.stream()).parallel()
.map(TaskDtoConverter::convert).collect(Collectors.toList());
}
}