package co.codewizards.cloudstore.core.repo.sync;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import co.codewizards.cloudstore.core.dto.CopyModificationDto;
import co.codewizards.cloudstore.core.dto.DeleteModificationDto;
import co.codewizards.cloudstore.core.dto.ModificationDto;
import co.codewizards.cloudstore.core.util.AssertUtil;
public class ModificationDtoSet {
private final Map<String, List<DeleteModificationDto>> path2DeleteModificationDtos;
private final Map<String, List<CopyModificationDto>> fromPath2CopyModificationDtos;
public ModificationDtoSet(final Collection<ModificationDto> modificationDtos) {
AssertUtil.assertNotNull(modificationDtos, "modificationDtos");
path2DeleteModificationDtos = new HashMap<String, List<DeleteModificationDto>>();
fromPath2CopyModificationDtos = new HashMap<String, List<CopyModificationDto>>();
for (final ModificationDto modificationDto : modificationDtos) {
if (modificationDto instanceof CopyModificationDto) {
final CopyModificationDto copyModificationDto = (CopyModificationDto) modificationDto;
final String fromPath = copyModificationDto.getFromPath();
List<CopyModificationDto> list = fromPath2CopyModificationDtos.get(fromPath);
if (list == null) {
list = new LinkedList<CopyModificationDto>();
fromPath2CopyModificationDtos.put(fromPath, list);
}
list.add(copyModificationDto);
}
else if (modificationDto instanceof DeleteModificationDto) {
final DeleteModificationDto deleteModificationDto = (DeleteModificationDto) modificationDto;
final String path = deleteModificationDto.getPath();
List<DeleteModificationDto> list = path2DeleteModificationDtos.get(path);
if (list == null) {
list = new LinkedList<DeleteModificationDto>();
path2DeleteModificationDtos.put(path, list);
}
list.add(deleteModificationDto);
}
else
throw new UnsupportedOperationException("Unknown ModificationDto type: " + modificationDto);
}
}
public Map<String, List<CopyModificationDto>> getFromPath2CopyModificationDtos() {
return fromPath2CopyModificationDtos;
}
public Map<String, List<DeleteModificationDto>> getPath2DeleteModificationDtos() {
return path2DeleteModificationDtos;
}
}