001package co.codewizards.cloudstore.core.repo.sync;
002
003import static java.util.Objects.*;
004
005import java.util.Collection;
006import java.util.HashMap;
007import java.util.LinkedList;
008import java.util.List;
009import java.util.Map;
010
011import co.codewizards.cloudstore.core.dto.CopyModificationDto;
012import co.codewizards.cloudstore.core.dto.DeleteModificationDto;
013import co.codewizards.cloudstore.core.dto.ModificationDto;
014
015public class ModificationDtoSet {
016
017        private final Map<String, List<DeleteModificationDto>> path2DeleteModificationDtos;
018        private final Map<String, List<CopyModificationDto>> fromPath2CopyModificationDtos;
019
020        public ModificationDtoSet(final Collection<ModificationDto> modificationDtos) {
021                requireNonNull(modificationDtos, "modificationDtos");
022                path2DeleteModificationDtos = new HashMap<String, List<DeleteModificationDto>>();
023                fromPath2CopyModificationDtos = new HashMap<String, List<CopyModificationDto>>();
024                for (final ModificationDto modificationDto : modificationDtos) {
025                        if (modificationDto instanceof CopyModificationDto) {
026                                final CopyModificationDto copyModificationDto = (CopyModificationDto) modificationDto;
027                                final String fromPath = copyModificationDto.getFromPath();
028                                List<CopyModificationDto> list = fromPath2CopyModificationDtos.get(fromPath);
029                                if (list == null) {
030                                        list = new LinkedList<CopyModificationDto>();
031                                        fromPath2CopyModificationDtos.put(fromPath, list);
032                                }
033                                list.add(copyModificationDto);
034                        }
035                        else if (modificationDto instanceof DeleteModificationDto) {
036                                final DeleteModificationDto deleteModificationDto = (DeleteModificationDto) modificationDto;
037                                final String path = deleteModificationDto.getPath();
038                                List<DeleteModificationDto> list = path2DeleteModificationDtos.get(path);
039                                if (list == null) {
040                                        list = new LinkedList<DeleteModificationDto>();
041                                        path2DeleteModificationDtos.put(path, list);
042                                }
043                                list.add(deleteModificationDto);
044                        }
045                        else
046                                throw new UnsupportedOperationException("Unknown ModificationDto type: " + modificationDto);
047                }
048        }
049
050        public Map<String, List<CopyModificationDto>> getFromPath2CopyModificationDtos() {
051                return fromPath2CopyModificationDtos;
052        }
053
054        public Map<String, List<DeleteModificationDto>> getPath2DeleteModificationDtos() {
055                return path2DeleteModificationDtos;
056        }
057
058}