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}